如何在Rspec中忽略对不同参数的同一方法的一些调用?

时间:2014-09-02 00:16:01

标签: ruby-on-rails ruby rspec mocking resque

这是我的情景:

更新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的所有其他调用,是否有一种方法只能模拟自定义调用并忽略其他带有不同参数的调用?

提前致谢;)

1 个答案:

答案 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