--only-failures
オプションの使用方法
--only-failures
オプションは、前回実行時に失敗した例だけを実行するようにフィルタリングします。このオプションを使用するには、まず config.example_status_persistence_file_path
を設定する必要があります。RSpecは、前回実行時の各例のステータスを保存するためにこの設定を使用します。
また、--next-failure
オプションもあります。これは --only-failures --fail-fast --order defined
の省略形です。これにより、現在失敗している例のうち1つに集中し、次の失敗に移行するなど、繰り返し実行することができます。
これらのオプションは、他のディレクトリやファイル名と組み合わせることもできます。RSpecは、ロードされた例のセットから失敗した例のみを実行します。
背景
以下の内容で "spec/spec_helper.rb" という名前のファイルがあるとします。
RSpec.configure do |c|
c.example_status_persistence_file_path = "examples.txt"
end
また、以下の内容で ".rspec" という名前のファイルがあるとします。
--require spec_helper
--order random
--format documentation
さらに、以下の内容で "spec/array_spec.rb" という名前のファイルがあるとします。
RSpec.describe 'Array' do
it "checks for inclusion of 1" do
expect([1, 2]).to include(1)
end
it "checks for inclusion of 2" do
expect([1, 2]).to include(2)
end
it "checks for inclusion of 3" do
expect([1, 2]).to include(3) # failure
end
end
そして、以下の内容で "spec/string_spec.rb" という名前のファイルがあるとします。
RSpec.describe 'String' do
it "checks for inclusion of 'foo'" do
expect("food").to include('foo')
end
it "checks for inclusion of 'bar'" do
expect("food").to include('bar') # failure
end
it "checks for inclusion of 'baz'" do
expect("bazzy").to include('baz')
end
it "checks for inclusion of 'foobar'" do
expect("food").to include('foobar') # failure
end
end
さらに、以下の内容で "spec/passing_spec.rb" という名前のファイルがあるとします。
puts "Loading passing_spec.rb"
RSpec.describe "A passing spec" do
it "passes" do
expect(1).to eq(1)
end
end
そして、一度 rspec
を実行した結果が "8 examples, 3 failures" であるとします。
rspec --only-failures
を実行すると、失敗した例のみをロードして実行します
rspec --only-failures
を実行すると
rspec --only-failures
の出力に "3 examples, 3 failures" が含まれるはずです
また、rspec --only-failures
の出力に "Loading passing_spec.rb" が含まれていないはずです。
--only-failures
オプションをファイル名と組み合わせる
rspec spec/array_spec.rb --only-failures
を実行すると
出力に "1 example, 1 failure" が含まれるはずです。
rspec spec/string_spec.rb --only-failures
を実行すると
出力に "2 examples, 2 failures" が含まれるはずです。
--next-failure
オプションを使用して単一の失敗を繰り返し実行する
rspec --next-failure
を実行すると
出力に "1 example, 1 failure" が含まれるはずです。
そして、出力には「3の含まれていることをチェックする」というテキストが含まれている必要があります。
もし「spec/array_spec.rb」を修正して、「to include(3)」を「not_to include(3)」に置き換えると、
そして、rspec --next-failure
を実行すると、
すると、出力には「2つの例、1つの失敗」というテキストが含まれている必要があります。
そして、出力には「3の含まれていることをチェックする」というテキストが含まれている必要があります。
そして、出力には「'bar'の含まれていることをチェックする」というテキストが含まれている必要があります。
もし「spec/string_spec.rb」を修正して、「to include('bar')」を「not_to include('bar')」に置き換えると、
そして、rspec --next-failure
を実行すると、
すると、出力には「2つの例、1つの失敗」というテキストが含まれている必要があります。
そして、出力には「'bar'の含まれていることをチェックする」というテキストが含まれている必要があります。
そして、出力には「'foobar'の含まれていることをチェックする」というテキストが含まれている必要があります。
もし「spec/string_spec.rb」を修正して、「to include('foobar')」を「not_to include('foobar')」に置き換えると、
そして、rspec --next-failure
を実行すると、
すると、出力には「1つの例、0つの失敗」というテキストが含まれている必要があります。
そして、出力には「'foobar'の含まれていることをチェックする」というテキストが含まれている必要があります。
もしrspec --next-failure
を実行すると、
すると、出力には「すべての例がフィルタリングされました」というテキストが含まれている必要があります。
rspec --only-failures
を実行してもパスするspecファイルは実行されません
もしrspec spec/passing_spec.rb --only-failures
を実行すると、
すると、出力には「0つの例、0つの失敗」というテキストが含まれている必要があります。
example_status_persistence_file_path
を設定せずに--only-failures
を使用すると明確なエラーが表示されます
もしexample_status_persistence_file_path
を設定していない場合、
そして、rspec --only-failures
を実行すると、
すると、出力には「--only-failures
を使用するには、まずconfig.example_status_persistence_file_path
を設定する必要があります。」というテキストが含まれている必要があります。