如何在 RSpec 中不执行存根方法

How to not execute a stubbed method in RSpec

我正在测试控制器调用它包含的模块中的特定方法。我不希望该方法实际执行,只是为了验证它是否被调用。我现在拥有的是:

it 'calls create_show_and_tickets' do
  sign_in create :admin
  expect(subject).to receive(:create_show_and_tickets)

  post :create, show: valid_attributes
end

在测试中我没有输入正确的参数,所以当我试图遍历一个不存在的对象时会抛出错误。有没有办法确保 create_show_and_tickets 不执行?

Is there a way to make sure that create_show_and_tickets does not execute?

您已通过调用

完成了此操作
expect(subject).to receive(:create_show_and_tickets)

... 在 post 之前。 allow 会产生同样的效果。在任何一种情况下,底层代码都会被您的模拟或存根替换,并且不会被调用。

您可以在 create_show_and_tickets 中放入调试语句来确认这一点。