6

我正在尝试使用 RSpec 模拟和should_receive自定义匹配器。我想捕获由should_receive匹配器返回正确值引起的错误,并导致它输出我的自定义失败消息。

怎么做?或者也许我应该改变我的方法?

4

2 回答 2

9

答案是:

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

终于在这里找到了

于 2012-11-13T10:30:51.187 回答
1

接受的答案是正确的,但现在已经过时了。从 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)

另请参阅有关自定义匹配器的文档

于 2019-07-05T23:47:33.523 回答