尝试使用delayed_job_active_record升级到Rails 4.2。我没有为测试环境设置delayed_job后端,因为我认为这样作业会立即执行。
我正在尝试使用 RSpec 测试新的“deliver_later”方法,但我不确定如何测试。
旧 Controller 代码:
ServiceMailer.delay.new_user(@user)
新 Controller 代码:
ServiceMailer.new_user(@user).deliver_later
我曾经这样测试过:
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))
现在我使用它时遇到错误。 (双“邮件程序”收到意外消息:deliver_later(无参数))
只是
expect(ServiceMailer).to receive(:new_user)
也因“nil:NilClass 的未定义方法‘deliver_later’”而失败
我尝试了一些示例,可让您查看是否使用 ActiveJob 中的 test_helper 将作业排队,但我尚未成功测试是否已将正确的作业排队。
expect(enqueued_jobs.size).to eq(1)
如果包含 test_helper,则通过,但它不允许我检查正在发送的电子邮件是否正确。
我想做的是:
- 测试正确的电子邮件是否已排队(或在测试环境中立即执行)
- 使用正确的参数 (@user)
有什么想法吗? 谢谢
最佳答案
如果我理解正确,你可以这样做:
message_delivery = instance_double(ActionMailer::MessageDelivery)
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(message_delivery)
allow(message_delivery).to receive(:deliver_later)
关键是您需要以某种方式为deliver_later
提供一个 double 值。
关于ruby-on-rails - 如何使用 rspec 测试 ActionMailer Deliver_later,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647749/