我想这样做:
some_method.should_raise <any kind of exception, I don't care>
我该怎么做呢?
some_method.should_raise exception
... 是行不通的。
我想这样做:
some_method.should_raise <any kind of exception, I don't care>
我该怎么做呢?
some_method.should_raise exception
... 是行不通的。
expect { some_method }.to raise_error
RSpec 1 语法:
lambda { some_method }.should raise_error
有关更多信息,请参阅文档(RSpec 1语法)和RSpec 2文档。
使用expect to代替lambda:
expect { some_method }.to raise_error
这适用于rspec的最新版本,即rspec 2.0及更高版本。
更多信息请参见doco。
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是可以互换的。
RSpec 1
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的别名。
文档:https://www.relishapp.com/rspec
RSpec 2:
https://www.relishapp.com/rspec/rspec-expectations/v/2-13/docs/built-in-matchers/raise-error-matcher
RSpec 1:
http://apidock.com/rspec/Spec/Matchers/raise_error http://apidock.com/rspec/Spec/Matchers/raise_exception
从3.3版开始,对于不带参数的空白raise_error, gem会引发警告
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_positive = false。