メインコンテンツまでスキップ

失敗時の終了コードの設定

RSpecが失敗した場合にカスタムの終了コードを設定するには、failure_exit_codeオプションを使用します。

RSpec.configure { |c| c.failure_exit_code = 42 }

背景

以下の内容で「spec/spec_helper.rb」という名前のファイルがあるとします。

RSpec.configure { |c| c.failure_exit_code = 42 }

デフォルトの終了コードで失敗するスペック

以下の内容で「spec/example_spec.rb」という名前のファイルがあるとします。

RSpec.describe "something" do
it "fails" do
fail
end
end

rspec spec/example_spec.rbを実行すると、

終了ステータスは1であるべきです。

カスタムの終了コードで失敗するスペック

以下の内容で「spec/example_spec.rb」という名前のファイルがあるとします。

require 'spec_helper'
RSpec.describe "something" do
it "fails" do
fail
end
end

rspec spec/example_spec.rbを実行すると、

終了ステータスは42であるべきです。

カスタムの終了コードでスペックの実行エラーが発生する場合

以下の内容で「spec/typo_spec.rb」という名前のファイルがあるとします。

require 'spec_helper'
RSpec.escribe "something" do # intentional typo
it "works" do
true
end
end

rspec spec/typo_spec.rbを実行すると、

終了ステータスは42であるべきです。

カスタムの終了コードが定義されている場合のスペックの成功

以下の内容で「spec/example_spec.rb」という名前のファイルがあるとします。

require 'spec_helper'
RSpec.describe "something" do
it "works" do
true
end
end

rspec spec/example_spec.rbを実行すると、

終了ステータスは0であるべきです。

at_exitフックが上流で追加された場合、デフォルトの終了コードで終了する

以下の内容で「exit_at_spec.rb」という名前のファイルがあるとします。

require 'rspec/autorun'
at_exit { exit(0) }

RSpec.describe "exit 0 at_exit ignored" do
it "does not interfere with the default exit code" do
fail
end
end

ruby exit_at_spec.rbを実行すると、

終了ステータスは1であるべきです。