迁移至deliver_later+Sidekiq后,Rake测试是否有邮件队列测试等价方法?
在Rake测试(Minitest)中测试邮件队列的等价方法
当你把邮件发送从deliver_now迁移到deliver_later(基于Sidekiq)后,之前依赖ActionMailer::Base.deliveries.count的断言不再适用——因为邮件不会立即进入交付列表,而是进入Sidekiq队列等待执行。
在Rails自带的Minitest框架中,确实存在和RSpec的assert_enqueued_emails等价的断言方法,具体用法如下:
1. 断言入队邮件数量
直接使用assert_enqueued_emails方法,指定预期的入队邮件数量:
assert_enqueued_emails 1
2. 精确断言指定邮件类与参数
如果你需要验证特定的邮件类、方法或参数是否入队,可以用assert_enqueued_email_with:
assert_enqueued_email_with UserMailer, :welcome, args: [@user]
这个方法会检查是否有指定邮件类的指定方法,携带对应参数被加入队列。
注意事项
- 这些是Rails内置的断言方法,无需额外安装gem,只要测试环境加载了Rails的测试辅助模块即可使用。
- 若使用低于Rails 5.0的旧版本,可能需要手动配置队列测试辅助工具,但当前主流版本已原生支持。
内容的提问来源于stack exchange,提问作者Edward Caulfield
相关产品推荐
相关产品推荐

