gpt4 book ai didi

ruby-on-rails - 如何使用 rspec 测试 ActionMailer Deliver_later

转载 作者:行者123 更新时间:2023-12-03 05:34:43 25 4
gpt4 key购买 nike

尝试使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com