10

我提出了一个错误使用raise(ConfigurationError.new(msg))

我试图用 rspec 对此进行测试:

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

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

4

2 回答 2

24

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

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

这将检查是否使用消息 notNoMethodError引发。private methodundefined method

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

于 2016-10-22T16:58:35.830 回答
4

确保您使用的是 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
于 2013-08-06T14:46:55.793 回答