Rspec是否可以做类似should_receive(:foo).with(:bar).and_call_original.exacly(1).times的事情?

问题描述 投票:0回答:1

是否可以做类似

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个回答
3
投票

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

相反,你可以这样做:

.should_receive(:foo).with(:bar).exactly(1).times.and_call_original
© www.soinside.com 2019 - 2024. All rights reserved.