繁体   English   中英

如何为在 Rails 5 中调用邮件程序的方法编写 rspec 模拟

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM