describes
クラスであり、その中にさまざまなcontexts
があり、それぞれがさまざまなit
ブロックを持つテスト仕様があります。
context
を一時的に無効にする方法はありますか?
無効にするcontext
内の最上部にpending "temporarily disabled"
呼び出しを追加しようとしましたが、仕様を実行したときに保留中の問題が表示されましたが、残りのテスト。
これは私が持っていたものです:
describe Something
context "some tests" do
it "should blah" do
true
end
end
context "some other tests" do
pending "temporarily disabled"
it "should do something destructive" do
blah
end
end
end
しかし、私が言ったように、保留中の呼び出しの下でテストを実行しました。
検索すると、これが メーリングリストスレッド につながり、rspecの作成者(?)が、私が実行しているrspec 2で可能だと言っています。うまくいったと思いますが、次のテストをすべて無効にするという望ましい効果はありませんでした。これは、pending
呼び出しを見たときに考えていることです。
代替手段はありますか、それとも間違っていますか?
RSpecを使用して仕様のツリーを無効にするには:
before { skip }
# or
xdescribe
# or
xcontext
出力に表示されるメッセージをskipで追加できます。
before { skip("Awaiting a fix in the gem") }
RSpec 2:
before { pending }
除外フィルター を使用します。そのページから:spec_helper.rb
(またはRails_helper.rb
)
RSpec.configure do |c|
c.filter_run_excluding :broken => true
end
テストでは:
describe "group 1", :broken => true do
it "group 1 example 1" do
end
it "group 1 example 2" do
end
end
describe "group 2" do
it "group 2 example 1" do
end
end
「rspec ./spec/sample_spec.rb --format doc」を実行すると
次に、出力には「グループ2の例1」が含まれます。
また、出力には「グループ1の例1」を含めないでください
また、出力には「グループ1の例2」を含めないでください
あなたがこれについてどう思うか見てみましょう:
describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
it "does something well"
it "rejects invalid input"
end
「しばらく」何かを無効にしているときに、保留中のアイテムの理由を確認するのが好きです。コメントや除外されたサンプル/ファイルに埋もれるのではなく、定期的に表示される小さなコメント/ TODOとして機能します。
it
をpending
またはxit
に変更するのは迅速かつ簡単ですが、ハッシュの構築を好みます。毎回実行されるドキュメントを提供し、ドロップイン(describe/context/itを変更しないため、後で使用するものを決定する必要があります)。決定が下されるか、ブロッカーが削除されると、同様に簡単に削除されます。
これは、グループと個々の例で同じように機能します。
もう一つ。 https://Gist.github.com/1300152
xdescribe、xcontext、xitを使用して無効にします。
更新:
Rspec 2.11以降、デフォルトでxitが含まれています。新しいコードは
# put into spec_helper.rb
module RSpec
module Core
module DSL
def xdescribe(*args, &blk)
describe *args do
pending
end
end
alias xcontext xdescribe
end
end
end
使用法
# a_spec.rb
xdescribe "padding" do
it "returns true" do
1.should == 1
end
end
Describeの代わりにpendingを使用します。ブロックが次の場合:
context "some other tests" do
it "should do something destructive" do
blah
end
end
次の方法でブロック全体をスキップできます。
pending "some other tests" do
it "should do something destructive" do
blah
end
end
describe "GET /blah" do
before(:each) { pending "Feature to be implemented..." }
it { expect(page).to have_button("Submit") }
it { expect(page).to have_content("Blah") }
end
あなたのコードで何が起こっているのかを説明するだけです。あなたが持っている場所を含めて、起動中にファイルがロードされたときに評価される(したがって実行される)だけです。ただし、テストの実行時に実行する必要があります。これが、答えがpending
(RSpec 2)またはskip
(RSpec 3)をbefore
ブロックに入れることを示唆している理由です。