这是我的情景:
更新AR对象后,它会使用Resque触发一堆后台作业。在我的规格中,我正在嘲笑Resque#enqueue的调用,其中包含以下内容:
it 'should be published' do
# I need to setup these mocks in many places where I want to mock a specific call to Resque, otherwise it fails
Resque.should_receive(:enqueue).with(NotInterestedJob1, anything)
Resque.should_receive(:enqueue).with(NotInterestedJob2, anything)
Resque.should_receive(:enqueue).with(NotInterestedJob3, anything)
# I'm only interested in mocking this Resque call.
Resque.should_receive(:enqueue).with(PublishJob, anything)
end
正如您所看到的,我需要在每次想要模拟特定调用时模拟对Resque #enqueue的所有其他调用,是否有一种方法只能模拟自定义调用并忽略其他带有不同参数的调用?
提前致谢;)
答案 0 :(得分:14)
我认为在这种情况下你需要做我认为的方法存在等同于as_null_object
的方法,但在这种情况下专门用于调用你不关心的Resque.enqueue
:
it 'should be published' do
allow(Resque).to receive(:enqueue) # stub out this message entirely
expect(Resque).to receive(:enqueue).with(PublishJob, anything)
call_your_method.that_calls_enqueue
end