web-dev-qa-db-ja.com

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

特定のラベルを持つテストのみを実行する方法があると思います。誰か知ってる?

150
Nathan Long

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

# 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 で特に効果的です。

176
zetetic

-example(または-e)オプション を使用すると、特定の文字列を含むすべてのテストを実行できます。

rspec spec/models/user_spec.rb -e "User is admin"

私はそれを一番使います。

103
Jan Minárik

あなたの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
79
Tom Chapin

または、行番号を渡すことができます:rspec spec/my_spec.rb:75-行番号は、単一の仕様またはcontext/describeブロックを指すことができます(そのブロック内のすべての仕様を実行します)

65
Alex Lang

コロンを使用して複数の行番号をストリング化することもできます。

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

出力:

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

RSpec 2.4の時点で(推測)、fまたはxitspecifydescribeおよびcontextの前に追加できます。

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_methodhttp://rdoc.info/github/rspec/rspec- core/RSpec/Core/ExampleGroup#xit-class_method

config.filter_run focus: trueconfig.run_all_when_everything_filtered = truespec_helper.rbが含まれていることを確認してください。

25
Joshua Muheim

また、デフォルトで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

3
itsnikolay

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
jwfearn

rspec spec/models/user_spec.rb -e "SomeContext won't run this"として実行できます。

0
Avijit Majhi