【问题标题】:Rspec is it possible to do something like should_receive(:foo).with(:bar).and_call_original.exacly(1).times?Rspec 是否可以做类似 should_receive(:foo).with(:bar).and_call_original.exacly(1).times 的事情?
【发布时间】:2013-08-22 13:07:18
【问题描述】:

有没有可能做类似ServiceObject.should_receive(:foo).with(:bar).and_call_original.exacly(1).times的事情?

我的规格看起来像这样:

it 'should call instance of service object\'s :baz! method' do
  ServiceObject.any_instance.should_receive(:baz!).exactly(1).times
end

it 'should call service object\'s :foo method' do
  ServiceObject.should_receive(:foo).with(:bar).and_call_original.exacly(1).times
end

如果我删除 and_call_original 第一个规范失败。如果我在第二个规范中注释掉.exacly(1).times,那么两个规范都会通过。

两个问题:

  • 为什么这两个规范会相互干扰?
  • 有没有办法调用表示.should_receive(:foo).with(:bar).and_call_original.exacly(1).times的东西?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby rspec matcher


    【解决方案1】:

    and_call_original 不返回当前的example,因此它无法工作。

    您可以这样做:

    .should_receive(:foo).with(:bar).exacly(1).times.and_call_original
    

    【讨论】:

    • 哈哈...应该尝试过。出于某种原因,我在想 .times 没有返回示例。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多