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

迁移至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:30:47