rspec:raise_error用法以匹配错误消息

时间:2013-08-06 13:09:39

标签: ruby rspec

我使用raise(ConfigurationError.new(msg))

引发了错误

我尝试用rspec测试这个:

expect {
  Base.configuration.username
}.to raise_error(ConfigurationError, message) 

但这不起作用。我该怎么测试呢?目标是匹配message

2 个答案:

答案 0 :(得分:9)

您可以将错误消息与正则表达式匹配:

it { expect{ Foo.bar }.to raise_error(NoMethodError, /private/) }

这会检查NoMethodError邮件是否private method而非undefined method

会很有用,因为即使出现相同的错误消息,NoMethodError.new也没有通过测试。

答案 1 :(得分:5)

确保您使用的是rspec> 2.14.0并看一下这个提交:

https://github.com/rspec/rspec-expectations/commit/7f02b503d5ae48d1141b6465acd0a7a4e1bb84dd

it "passes if an error instance is expected" do
  s = StandardError.new
  expect {raise s}.to raise_error(s)
end