Rspec是否有可能像should_receive(:foo).with(:bar).and_call_original.exacly(1).times?

时间:2013-08-22 13:07:19

标签: ruby-on-rails ruby rspec matcher

是否可以执行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的内容?

提前致谢!

1 个答案:

答案 0 :(得分:3)

and_call_original不会返回当前example,因此无效。

相反,你可以这样做:

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