Answers:
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:
代替lambda,使用期望:
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
当红宝石提出了一个匹配NoMethodError
,NameError
或者ArgumentError
,可能允许期望通过不执行,即使你打算调用的方法。而是考虑提供特定的错误类别或消息。此消息可以通过设置来supressed:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
。