rspec模拟应在自定义匹配器中接收

rspec模拟应在自定义匹配器中接收,rspec,mocking,match,Rspec,Mocking,Match,我正在尝试在自定义matcher中使用RSpec mock和should\u receive。我想捕获由应接收的引起的错误,以从匹配器返回正确的值,并使其输出自定义失败消息 怎么做?或者我应该改变我的方法?答案是: match do|obj| #在这里进行一些设置和模拟 开始 RSpec::Mocks::verify#运行模拟验证 真的 rescue RSpec::Mocks::MockExpectationError=>e #这里可以使用#{e}构造错误消息 假的 结束 结束 终于找到了公认

我正在尝试在自定义matcher中使用RSpec mock和
should\u receive
。我想捕获由
应接收的
引起的错误,以从匹配器返回正确的值,并使其输出自定义失败消息

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

答案是:

match do|obj|
#在这里进行一些设置和模拟
开始
RSpec::Mocks::verify#运行模拟验证
真的
rescue RSpec::Mocks::MockExpectationError=>e
#这里可以使用#{e}构造错误消息
假的
结束
结束

终于找到了

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