回答:
expect { some_method }.to raise_error
RSpec 1構文:
lambda { some_method }.should raise_error
詳細については、ドキュメント(RSpec 1構文の場合)およびRSpec 2のドキュメントを参照してください。
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
注:raise_error
およびraise_exception
は交換可能です。
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
注:raise_error
はのエイリアスですraise_exception
。
RSpec 2:
RSpec 1:
ラムダの代わりに、expect to:を使用します。
expect { some_method }.to raise_error
これは、rspecの最新バージョン、つまりrspec 2.0以降に適用されます。
詳細については、docoを参照してください。
expect
比べて良いか悪いかを説明していませんlambda
。
expect { visit welcome_path }.to raise_error
rspec-expections
gemのバージョン3.3から、パラメーターなしで空白のraise_errorの警告が発生します
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
これにより、コードがテスト用のテストとは異なるエラーで失敗する可能性があるというヒントが得られます。
警告:
raise_error
特定のエラーまたはメッセージを提供せずにマッチャーを使用すると、誤検出のリスクがありますraise_error
。RubyがNoMethodError
、NameError
またはを発生させると一致ArgumentError
するため、呼び出すつもりのメソッドを実行しなくても期待値が渡される可能性があります。代わりに、特定のエラークラスまたはメッセージを提供することを検討してください。このメッセージは、次のように設定することで抑制できますRSpec::Expectations.configuration.warn_about_potential_false_positives = false
。