web-dev-qa-db-ja.com

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

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呼び出しを見たときに考えていることです。

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

96

RSpecを使用して仕様のツリーを無効にするには:

before { skip }
# or 
xdescribe
# or 
xcontext

出力に表示されるメッセージをskipで追加できます。

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

RSpec 2

before { pending }
151
Pyro

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

43
Robert Speicher

あなたがこれについてどう思うか見てみましょう:

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

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

itpendingまたはxitに変更するのは迅速かつ簡単ですが、ハッシュの構築を好みます。毎回実行されるドキュメントを提供し、ドロップイン(describe/context/itを変更しないため、後で使用するものを決定する必要があります)。決定が下されるか、ブロッカーが削除されると、同様に簡単に削除されます。

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

19
botimer

もう一つ。 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 
9
GutenYe

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
3
Amir Samakar
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
1
Matt

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

0
PhilT