我想测试一个包含方法MessageMailer.message_notification(self).deliver
的方法。 MessageMailer有点慢,我写的测试不是测试它,所以我希望交付不在测试块中运行。
目前,我通过将其删除来实现这一目标。
before do
mail = double('email', deliver: true)
MessageMailer.stub(:message_notification) { mail }
end
但是我已经听说将来会将stub替换为double,并且MessageMailer.double(:message_notification)
在我的Rspec版本(2.12.2)中因NoMethodError而失败。我应该如何使用double重写此代码以防止调用传递方法?
答案 0 :(得分:1)
您可以使用https://relishapp.com/rspec/rspec-mocks/v/3-1/docs中所述的allow
'方法存根':
before do
mail = double('email', deliver: true)
allow(MessageMailer).to receive(:message_notification) { mail }
end
您也可以按https://relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/message-chains:
中所述使用receive_message_chain
before { allow(MessageMailer).to receive_message_chain(:message_notification, :deliver => true) }
但请注意关于得墨忒耳定律,脆性等的相关警告