Rails 7中assert_enqueued_email_with使用问题求助
问题解决:assert_enqueued_email_with 匹配失败
核心原因
你用UserMailer.with(...)传递的参数会被封装到邮件任务的params字段中,而测试代码里错误地使用了args:选项来匹配——args:对应的是调用邮件方法时的位置参数,但你的send_mail_to_subscriptions方法并没有接收位置参数,所以入队任务里的args是空数组,自然匹配失败。
修正后的测试代码
把测试里的args:替换成params:,同时确保参数类型一致(比如错误提示里website_id在期望中是字符串,实际入队的是数字,要对齐类型):
assert_enqueued_email_with UserMailer, :send_mail_to_subscriptions, params: {website_id: lastWebsiteId, subject: randomSubject, body: randomBody}
验证逻辑
对比你提供的入队任务详情:
- 实际入队的参数结构是
{params: {website_id: 310450396, ...}, args: []} - 原测试用
args:去匹配,相当于在找args字段里的内容,而正确的匹配对象是params字段里的键值对
这样修改后,测试就能正确匹配到入队的邮件任务了。
内容的提问来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

