如何测试同时使用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
相关产品推荐
相关产品推荐

