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

4dbbbstv  于 2022-11-29  发布在  Ruby
关注(0)|答案(1)|浏览(143)

这是我的场景:
更新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的所有其他调用。每次我想模拟一个特定的调用时,是否有一种方法可以只模拟一个自定义调用,而忽略其他具有不同参数的调用?
提前致谢;)

cetgtptt

cetgtptt1#

我认为在这种情况下,您需要执行我认为相当于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

相关问题