12

次のRSpec構成(v2.12.0)があるとします。

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

スペックからタグを削除するのを忘れることがあり、すべてのスペックを実行したい継続的インテグレーション環境では、残りのタグ:focusを持つスペックのみが実行されます。:focus

私はもう試した:

rspec --tag ~focus

...:focusでタグ付けされたものを除くすべての仕様を実行します

rspecのコマンドラインオプションを使用して、タグを無視してすべての仕様を強制的に実行する方法はありますか?

4

4 に答える 4

13

これをプロジェクトに追加しました。

config.before :focused => true do
  fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS']
end

そして、継続的インテグレーションサーバーが実行するスクリプトでは、次のようになります。

export FORBID_FOCUSED_SPECS=true
于 2013-06-28T15:51:33.233 に答える
8

次の行を削除できます。

 config.filter_run :focus => true
 config.run_all_when_everything_filtered = true

を使用して集中テストを実行するようにユーザーに指示しますrspec --tag focus。そうすれば、CIは常に完全なテストスイートを実行します。

filter_run構成ブロックで環境をチェックし、設定を適切に含める/除外することを検討してください。

別の考え:gitを使用している場合は、pre-commitフックを設定して、スペックが:focus最初からコードベースに忍び寄らないようにします。

于 2013-02-18T22:08:29.127 に答える
8

フォーカスが設定されたときに、継続的インテグレーションサーバーで自動的に失敗したかったのです。これは、myronmarstonのコードに基づいて書き直され、rspec-rails3.2.0で正しく機能するようになりました。

  config.before(:example, :focus) do
    fail 'This example was committed with `:focus` and should not have been'
  end if ENV['CI']
于 2014-10-20T20:10:49.510 に答える
5

試す:rspec --tag focus --tag ~focus

于 2015-07-30T00:28:18.230 に答える