[英]How to write rspec mock for method that calls a mailer in rails 5
我正在尝试从我的端点测试一个邮件方法,如下所示:
ConfirmationMailer.send_email(email).deliver_later
相应的规范如下所示:
let(:confirmation_mailer_stub) { instance_double ConfirmationMailer }
before do
allow(ConfirmationMailer).to receive(:send_email)
end
it 'sends confirmation email' do
call_endpoint
expect(confirmation_mailer_stub).to change { ActionMailer::Base.deliveries.count }.by(1)
end
但我有一个错误:
NoMethodError: nil:NilClass 的未定义方法“deliver_later”
send_email
方法非常简单:
def send_email(email)
mail(to: email, cc: email)
end
我该如何测试这种方法?
您在ConfirmationMailer
中对send_email
进行了存根,但没有定义任何要返回的值:
before do
allow(ConfirmationMailer).to receive(:send_email)
end
您需要定义一个由存根方法返回的值(使用#and_return
)或调用 original :在允许(ConfirmationMailer)之前接收(:send_email).and_call_original end
也就是说,我认为这不是测试是否发送 email 的最佳方法。 更好地使用此答案中的建议:配置config.action_mailer.delivery_method =:test
并在全局数组ActionMailer::Base.deliveries
上断言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.