2

最初の失敗時にrspecテストを強制的に停止させるプログラム的な方法はありますか?

例えば、

  1. いくつかの rspec テストを含むテスト スイートがあり、それらをすべて一度に実行します。
  2. すべての rspec テストは個別の spec.rb ファイルにあります

これらのテストのいずれかで何らかの障害が発生した場合、失敗した特定のテスト ステップでその特定のテストの実行をさらに停止したいと思いますが、実行中のテスト スイート全体の実行を停止したくはありません。

私は次の方法があることを知っています:

RSpec.configure do |c|
  c.fail_fast = true
end

しかし、テスト スイートで実行したスペック ファイルのいずれかでそれを定義すると、スイートのすべての実行が失敗します。

このケースを処理する方法はありますか?

前もって感謝します

4

1 に答える 1

7

これは古い質問であることは知っていますが、これと同じ動作を自分で達成しようとしているときに偶然見つけました。無駄な検索を繰り返した結果、実際に目的の動作を提供する、かなり簡単に実装できるものを見つけました。

以下を各仕様ファイルに追加するだけで、例外が発生したときに (その特定のファイル内の) 以降の例をスキップできます。

  before :all do
    $continue = true
  end

  around :each do |example|
    if $continue
      $continue = false
      example.run
      $continue = true unless example.exception
    else
      example.skip
    end
  end

ここでのロジックは一目瞭然です。例外が発生するまでサンプルの実行を続け、その後、その仕様の残りのサンプルをスキップします。各フックの周りは、各例の実行を制御できるため、このロジックをうまく促進します。「around」フックの詳細については、 RSpec のドキュメントを参照してください。

于 2015-08-04T18:16:42.460 に答える