13

遅い例がいくつかありますが、それらは次のように除外されます。

RSpec.configure do |c|
  c.filter_run_excluding slow: true
end

describe 'get averages but takes a long time', slow: true do
  it 'gets average foo' do
    ....
  end

  it 'gets average bar' do
    ...
  end
end

これはうまく機能し、遅いテストを実行しません。

rspec

しかし、フィルターで除外された遅いものを含め、コマンドラインからすべての例を実行するためのRSpecコマンドは何ですか?

4

2 に答える 2

26

を実行するrspec --helpと、出力には次のものが含まれます。

    -t, --tag TAG[:VALUE]        Run examples with the specified tag, or exclude examples
                                 by adding ~ before the tag.
                                   - e.g. ~slow
                                   - TAG is always converted to a symbol

rspec --tag slow実行して、slowとしてタグ付けされたすべての例を実行できます。ただし、必要に応じて、すべての例が実行されるわけではありません。欲しいものを手に入れる簡単な方法はないと思います。フィルタは、exclusionコマンドラインでオーバーライドしたくない場合のために設計されました(たとえば、rubyバージョンなどに基づいて-rubyバージョンに適用されない仕様を強制的に実行することは意味がありません) 。rspecコアの問題を開いて、必要なものを追加するための潜在的な変更について話し合うことができます。それまでの間、環境変数を使用して取得できます。

RSpec.configure do |c|
  c.filter_run_excluding slow: true unless ENV['ALL']
end

この設定でrspecは、遅いスペックを除くすべてのスペックをALL=1 rspec実行し、遅いスペックを含むすべてのスペックを実行します。

于 2012-10-12T16:53:57.590 に答える
8

遅いテストを除く

rakeでデフォルトで低速テストを除外したい場合は、Myronの答えがおそらく最善の策です。ただし、これはほとんどの人にとってうまく機能するより単純なソリューションです。

# Run all tests
rspec

# Run tests, excluding the ones marked slow
rspec --tag ~slow

開発中は、ガードを使用してテストを実行します。すべてのテストを実行するときに、遅いテストを除外するようにガードに指示できます。このようにして、開発中は高速テストのみを実行でき、必要なときに、rakeまたは必要なrake --tag slowときに完全なスイートを実行できます。CIサーバーは、渡すための特別なENV変数を知らなくても、完全なスイートを実行できるため、これも優れています。

ガードファイル:

guard :rspec, cli: '--drb', run_all: {cli: '--tag ~slow'} do
  ...
end

Guardは、編集中のように、ウォッチをトリガーしたときに引き続き低速テストを実行します。

于 2012-12-20T20:02:52.617 に答える