我正在尝试使用 RSpec 模拟和should_receive
自定义匹配器。我想捕获由should_receive
匹配器返回正确值引起的错误,并导致它输出我的自定义失败消息。
怎么做?或者也许我应该改变我的方法?
答案是:
match do |obj|
# do some setup and mocks here
begin
RSpec::Mocks::verify # run mock verifications
true
rescue RSpec::Mocks::MockExpectationError => e
# here one can use #{e} to construct an error message
false
end
end
终于在这里找到了
接受的答案是正确的,但现在已经过时了。从 RSpec 3.x 开始,RSpec::Mocks::verify
不再MockExpectationError
像以前那样加注。
这对我来说效果很好,使用块期望:
RSpec::Matchers.define :expect_something_custom do |matcher_args|
supports_block_expectations
match do |block|
expect(…).to receive(…)
block.call
RSpec::Mocks.verify
end
end
expect { … }.to expect_something_custom(matcher_args)
另请参阅有关自定义匹配器的文档。