web-dev-qa-db-ja.com

rspecのガードで単一のテストを実行する方法は?

私は guard-rspec を使用して、ファイルが変更されたときに必要なrspecテストを自動的に実行します。ただし、複数のテストでファイルをデバッグしているとき、個別のテストを再実行したい場合があります。たとえば、コマンドラインからrspecを使用すると、次のようになります。

rspec spec/requests/my_favorite_spec.rb:100

これは、my_favorite_spec.rbの100行目の単一の仕様のみを実行します。

上記をガードコンソールに入力してみましたが、Enterキーを押したときのようにすべてのテストが実行されました。単一の仕様を実行するために、ガードコンソールに別の構文はありますか?

37
eirikir

spec/spec_helper.rbステートメントを受け入れるには、:focus => trueファイルに引数を指定する必要があります。

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

その後、使用できます

it 'does something', :focus => true do
  //your spec
end

または

describe "something", :focus => true do
  before do
     sign in
     visit page
  end

  it { does something }
  it { does something else }
end

そのアプローチを取る場合、_ ドキュメント化されたアプローチ を使用して、:focus => trueがどこにもない場合は、すべての仕様が実行されることを確認することもできます。

RSpec.configure do |config|
  config.run_all_when_everything_filtered = true
end

フィルターを使用すると、多くのことができます。あなたはこのページを見てみたいかもしれません: https://relishapp.com/rspec/rspec-core/v/3-0/docs/filtering

50
ChrisBarthol

ここで説明するように、Guardfileでfailed_mode: :focusを使用できます。 https://github.com/guard/guard-rspec#list-of-available-options

4
Rafael Oliveira

実行するスペックに「focus:true」オプションを追加できると思います。

it 'does something', focus: true do
  //your spec
end

次に、ファイルを保存し、ガードはそのフォーカスされたテストのみを実行します

終了したら、「focus:true」を削除するだけです

3
arieljuod