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

时间:2015-06-15 02:07:13

标签: ruby-on-rails 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不执行?

1 个答案:

答案 0 :(得分:3)

  

有没有办法确保create_show_and_tickets不会执行?

你已经通过调用

完成了这项工作
expect(subject).to receive(:create_show_and_tickets)

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

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