rspecでテストのグループを無効にしますか?


102

私はdescribesクラスとその中にさまざまcontextsitブロックを持つさまざまなテスト仕様を持っています。

context一時的に無効にする方法はありますか?

無効にしたいpending "temporarily disabled"内の最上部に呼び出しを追加してみましたcontextが、仕様を実行したときに保留中の問題が表示されましたが、残りのテストは引き続き実行されました。

これは私がちょっと持っていたものです:

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電話を見たときに考えていることです。

代替案はありますか、それとも間違っていますか?

回答:


165

RSpec 3を使用して仕様ツリーを無効にするには、次の方法があります。

before { skip }
# or 
xdescribe
# or 
xcontext

出力に表示されるスキップ付きのメッセージを追加できます。

before { skip("Awaiting a fix in the gem") }

RSpecの2

before { pending }

1
次のようなブロックでどのように正確にそれを行うのですか?describe 'XXXXX' do .... end
p.matsinopoulos 2013

2
@ p.matsinopoulos次の行に追加するだけdescribe 'XXXXX' doです。@Pyroに感謝します。
chesterbr 2013

フィルターよりも簡単なソリューション、+ 1
ドルツェンコ2013年

わたしは、あなたを愛しています。私はあなたにビールを借りています!
Aldo 'xoen' Giambelluca

2
これはいいね。また、出力に表示される「スキップ」の後にメッセージを含めることもできます。
Jan Hettich、2014年

44

除外フィルターを使用します。そのページから:あなたの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」を含めないでください。


19

あなたがこれについてどう思うか見てください:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

「しばらく」何かを無効にしているときに、保留中のアイテムの理由を確認するのが好きです。それらは、コメントや除外された例/ファイルに埋め込まれるのではなく、定期的に提示される小さなコメント/ TODOとして機能します。

またはitへの変更はすばやく簡単ですが、私はハッシュの構築を好みます。それはあなたにすべての実行のドキュメントを提供し、ドロップインであり(describe / context / itを変更しないので、後で何を使用するかを決定する必要があります)、決定が行われた場合やブロッカーが削除された場合と同じくらい簡単に削除されます。pendingxit

これは、グループと個々の例で同じように機能します。


また、describeでも同じように機能するかどうかはわかりませんが、保留中の場合は実際にテストが実行され、テストに合格し始めると失敗します。xdescribe(私はxitと同じように推測します)-実行しません。
PL J

1
との両方pending:skip:、rspec 3.6.0 でこれが機能することを確認しました。私にとって最良の解決策のようです。rspec3で保留中はまだテストを実行しますが、実行skipしません(ただしを適用した場合skip)。
jrochkind

9

別のもの。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 

3

説明ではなく保留を使用します。あなたのブロックが:

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

1
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

0

コードで何が起こっているかを説明するためだけに。あなたが持っている場所にそれを含めると、起動時にファイルがロードされたときに評価される(したがって実行される)だけです。ただし、テストの実行時に実行する必要があります。回答がpending(RSpec 2)またはskip(RSpec 3)をbeforeブロックに入れることを提案しているのはこのためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.