Rspecで特定のテストのみを実行するにはどうすればよいですか?


回答:


186

ドキュメントを見つけるのは簡単ではありませんが、例にハッシュのタグを付けることができます。例えば。

# spec/my_spec.rb
describe SomeContext do
  it "won't run this" do
    raise "never reached"
  end

  it "will run this", :focus => true do
    1.should == 1
  end
end

$ rspec --tag focus spec/my_spec.rb

GitHubの詳細。(より良いリンクを持っている人は、アドバイスしてください)

(更新)

RSpecはここで見事に文書化されています。詳細については、-tagオプションのセクションを参照してください。

v2.6以降、この種のタグは、構成オプションを含めることでさらに簡単に表現treat_symbols_as_metadata_keys_with_true_valuesできるようになりました。

describe "Awesome feature", :awesome do

どこに:awesomeあるかのように扱われ:awesome => trueます。

RSpecを構成して「フォーカス」テストを自動的に実行する方法については、この回答も参照してください。これは特にGuardでうまく機能します。


あなたが探して行く必要はありませんので、のzetetic提案への直接リンクは、(RSpecの2.12用)はこちらrelishapp.com/rspec/rspec-core/v/2-12/docs/command-line/...
tir38

コードがフォーカスとマージされないようにするために、仕様をスイートに追加しました。ソース管理ではtrueのままです。 gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s gitフックを使用してでコミットをブロックします:focus。これにより、「binding.pry , console.log」などの望ましくないものがコードベースに侵入することも防止されます。
zetetic 2013年

1
@そうではなく、私はただのファンです:) Relishで彼らがしたことは本当に好きですが、SOは独自のドキュメント機能を立ち上げたばかりなので、競争が発生する可能性があります。
zetetic 2016

1
多分あなたは実際にrspecプログラムの使用法と実際の振る舞いを説明するドキュメントの方法で私を指摘することができます:) Relish docはそうではないので。
Otheus


89

あなたのspec_helper.rb

RSpec.configure do |config|
    config.filter_run focus: true
    config.run_all_when_everything_filtered = true
end

そしてあなたの仕様に:

it 'can do so and so', focus: true do
    # This is the only test that will run
end

次のように、 'fit'を使用してテストに集中したり、 'xit'を使用して除外したりすることもできます。

fit 'can do so and so' do
    # This is the only test that will run
end

1
rspec 3.5では、この例にconfig.filter_run_when_matching追加:focusするだけで機能します
Ali Ghanavatian

4
'focus:true'が誤ってコミットされた場合、ほとんどのテストを実行していなくてもCIは合格です。
ザック

67

あるいは、行番号を渡すことができます:rspec spec/my_spec.rb:75-行番号は、単一の仕様またはコンテキスト/記述ブロック(そのブロック内のすべての仕様を実行)を指すことができます


50

複数の行番号をコロンでつなぐこともできます:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

出力:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}

これはとてもゴールドです!🙇🏾‍♂️
iGbanam

28

RSpecの2.4(私は推測)のとして、あなたは先頭に付加できるfxitspecifydescribecontext

fit 'run only this example' do ... end
xit 'do not run this example' do ... end

http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method

持っているようにしてくださいconfig.filter_run focus: trueconfig.run_all_when_everything_filtered = trueあなたの中にspec_helper.rb


5

RSpecの新しいバージョンでは、サポートの設定がさらに簡単になりましたfit

# spec_helper.rb

# PREFERRED
RSpec.configure do |c|
  c.filter_run_when_matching :focus
end

# DEPRECATED
RSpec.configure do |c|
  c.filter_run focus: true
  c.run_all_when_everything_filtered = true
end

見る:

https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching

https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered


3

また、あなたはfocus: trueデフォルトで持っているスペックを実行することができます

spec / spec_helper.rb

RSpec.configure do |c|
  c.filter_run focus: true
  c.run_all_when_everything_filtered = true
end

次に、単に実行します

$ rspec

集中テストのみが実行されます

次に、focus: trueすべてのテストを削除したら、もう一度実行します

詳細:https : //www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters


されspec/spec_helper.rb、常に含まれ?またはオプションが指定されていない場合のみ?なぜテストモジュールにはrequire 'spec_helber'があり、上記のコードがないので、ファイルを指定して単一のテストを実行する可能性がなくなりますか?これに関するドキュメントは見つかりません。
Otheus

1
spec_helper.rbあなたが持っている場合は、常に含まれている--require spec_helper.rspec、プロジェクトのルートに。
クリス2017

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