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

raise_error マッチャー

raise_error マッチャーを使用して、コードブロックがエラーを発生させることを指定します。最も基本的な形式では、エラーがスローされればパスします。

expect { raise StandardError }.to raise_error

raise_exception を使用することもできます。

expect { 3 / 0 }.to raise_exception

raise_errorraise_exception は機能的に同じですので、任意のコンテキストで最も適切な方を使用してください。

上記の基本形式に加えて、エラー/例外の詳細を指定する方法がいくつかあります。

(((bad1c887d8d625e9)))

任意のエラーを期待する

次の内容で "example_spec" という名前のファイルを作成します。

RSpec.describe "calling a missing method" do
it "raises" do
expect { Object.new.foo }.to raise_error
end
end

rspec example_spec を実行すると、例がパスするはずです。

特定のエラーを期待する

次の内容で "example_spec" という名前のファイルを作成します。

RSpec.describe "calling a missing method" do
it "raises" do
expect { Object.new.foo }.to raise_error(NameError)
end
end

rspec example_spec を実行すると、例がパスするはずです。

文字列でメッセージを一致させる

次の内容で "example_spec.rb" という名前のファイルを作成します。

RSpec.describe "matching error message with string" do
it "matches the error message" do
expect { raise StandardError, 'this message exactly'}.
to raise_error('this message exactly')
end
end

rspec example_spec.rb を実行すると、例がパスするはずです。

正規表現でメッセージを一致させる

次の内容で "example_spec.rb" という名前のファイルを作成します。

RSpec.describe "matching error message with regex" do
it "matches the error message" do
expect { raise StandardError, "my message" }.
to raise_error(/my mess/)
end
end

rspec example_spec.rb を実行すると、例がパスするはずです。

with_message でメッセージを一致させる

次の内容で "example_spec.rb" という名前のファイルを作成します。

RSpec.describe "matching error message with regex" do
it "matches the error message" do
expect { raise StandardError, "my message" }.
to raise_error.with_message(/my mess/)
end
end

rspec example_spec.rb を実行すると、例がパスするはずです。

文字列でクラス + メッセージを一致させる

次の内容で "example_spec.rb" という名前のファイルを作成します。

RSpec.describe "matching error message with string" do
it "matches the error message" do
expect { raise StandardError, 'this message exactly'}.
to raise_error(StandardError, 'this message exactly')
end
end

rspec example_spec.rb を実行すると、例がパスするはずです。

正規表現でクラス + メッセージを一致させる

次の内容で "example_spec.rb" という名前のファイルを作成します。

RSpec.describe "matching error message with regex" do
it "matches the error message" do
expect { raise StandardError, "my message" }.
to raise_error(StandardError, /my mess/)
end
end

rspec example_spec.rb を実行すると、例がパスするはずです。

ブロックに渡されたエラーオブジェクトに期待値を設定する

Given a file named "example_spec" with:

RSpec.describe "#foo" do
it "raises NameError" do
expect { Object.new.foo }.to raise_error { |error|
expect(error).to be_a(NameError)
}
end
end

When I run rspec example_spec

Then the example should pass.

チェーンされたマッチャーを使用してエラーオブジェクトの期待値を設定する

Given a file named "example_spec" with:

RSpec.describe "composing matchers" do
it "raises StandardError" do
expect { raise StandardError, "my message" }.
to raise_error(an_instance_of(StandardError).and having_attributes({"message" => "my message"}))
end
end

When I run rspec example_spec

Then the example should pass.

エラーが全く発生しないことを期待する

Given a file named "example_spec" with:

RSpec.describe "#to_s" do
it "does not raise" do
expect { Object.new.to_s }.not_to raise_error
end
end

When I run rspec example_spec

Then the example should pass.