You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试同时使用params与参数的ActionMailer邮件方法?

测试同时使用params和参数的Action Mailer方法

你有一个同时使用params(通过with方法传递)和方法参数的邮件发送方法:

class UserMailer < ActionMailer::Base
  def invoice(invoice)
    @user = params[:user]
    # 其他邮件逻辑
  end
end

尝试了以下断言但均未生效:

assert_enqueued_email_with UserMailer.with(user), :invoice, args: { invoice }
assert_enqueued_email_with UserMailer.with(user), :invoice, args: [ user, invoice ]
assert_enqueued_email_with UserMailer.with(user), :invoice, params: { user: user }, args: [ invoice ]

正确的测试断言写法

不需要提前调用UserMailer.with(user),而是直接在断言中分别指定params(对应with传递的内容)和args(对应邮件方法的参数):

assert_enqueued_email_with UserMailer, :invoice, params: { user: user }, args: [invoice]

原理说明

  • params选项对应调用UserMailer.with(user)时传入的哈希值,也就是邮件实例中params属性的内容
  • args选项对应邮件方法invoice接收的位置参数数组,这里方法只接收invoice一个参数,所以数组是[invoice]
  • 断言时不需要提前构建with后的邮件类实例,直接传入原始的UserMailer类即可

内容的提问来源于stack exchange,提问作者Tom Rossi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:45:55