Tom*_*ssi 5 ruby-on-rails actionmailer ruby-on-rails-5.2
我不知道如何使用语法来断言电子邮件已正确排队。具体来说,当参数是对象时,如何将参数传递给邮件程序?
例如,如果您想将文档中的联系人对象传递给示例:
assert_enqueued_email_with ContactMailer, :welcome, @contact do
ContactMailer.welcome(@contact).deliver_later
end
assert_enqueued_email_with ContactMailer, :welcome, args: @contact do
ContactMailer.welcome.deliver_later
end
assert_enqueued_email_with ContactMailer, :welcome, [@contact] do
ContactMailer.welcome.deliver_later
end
Run Code Online (Sandbox Code Playgroud)
这些似乎都不起作用。如果您查看实际的排队作业,该对象如下所示:
{:job=>ActionMailer::DeliveryJob, :args=>["ContactMailer", "welcome", "deliver_now", {"_aj_globalid"=>"gid://app_name/Contact/1015983224"}], :queue=>"mailers"}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我知道这可能为时已晚,无法帮助您,但我最近遇到了同样的问题,所以希望这个解决方法能够帮助下一个人。在底层,assert_enqueued_email_with只使用assert_enqueued_with,我们可以直接使用它来创建一个测试,以找到排队的电子邮件,如下所示。
assert_enqueued_with(job: ContactMailer.delivery_job, args: ['ContactMailer', 'welcome', 'deliver_now', @contact], queue: 'mailers')
Run Code Online (Sandbox Code Playgroud)
此测试与 assert_enqueued_email_with 生成的测试之间的唯一区别是 @contact 没有包装在额外的数组中。
编辑:我想回来提一下,我只是在从 Rails 5.2 更新到 Rails 6.0 的过程中遇到了这个错误。一旦我进一步进行更新,这个问题就消失了,并且assert_enqueued_with按预期工作,而之前使用assert_enqueued_with的解决方法不再匹配。具体来说,是在将 Delivery_job 设置为新的默认值之后。
Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |