我正在测试我的一个邮件程序,我有一个控制器测试,只是断言邮件程序被调用(非常类似于the example from email_spec)。
# spec/controllers/friendships_controller_spec.rb
it "sends an email when someone sends you a contact request" do
NotificationMailer.any_instance.should_receive(:contact_request).with(default_user, user)
xhr :post, :create, {:friendship => {:friend_id => user.id}}
end
由于在contact_request模板中将变量设置为nil
,此规范失败。所以看起来...... contact_request
方法实际上正在执行并呈现其模板,即使我已经模拟了方法。怎么样?
如果它有任何区别,模板在实际应用程序中渲染得很好 - 该变量在此特定规范中仅设置为nil。
答案 0 :(得分:1)
尝试从存根链中删除any_instance
?是不是在您的代码中通过:NotificationMailer.contact_request
调用了它? any_instance
假设它是在类的实例上调用的,而不是在类本身上调用。
答案 1 :(得分:0)
好的,我正在模拟NotificationMailer的实例的方法,但当然你实际上是在类上调用它。看起来ActionMailer :: Base正在做一些method_missing magic让你把它称为类方法,即使它被定义为实例方法。
解决方案就是在类上调用should_receive
,而不是实例。
NotificationMailer.should_receive(:contact_request)