如何在 rails RSpec 功能测试中测试异步邮件程序?

How can I test an asyncronous mailer in a rails RSpec feature test?

我正在尝试编写一个功能测试,让用户发表评论,然后通过 rails 邮件发送通知。如果我将我的邮件程序调用更改为使用 .deliver_now 但我不想在生产中使用它,一切都在这里工作。我需要能够测试异步邮件投递,或者甚至只是强制邮件程序在测试场景中立即投递。

login_as campaign_owner
visit campaign_path campaign
fill_in 'Comment', with: 'Foo'
click_on 'Submit'
expect(page).to have_content I18n.t('comments.create.success')
expect(campaign.comments.count).to eq 1
expect(UserMailer.deliveries.count { |d| d.to == [campaign_watcher.email]}).to eq 1

您始终可以通过测试您 运行 所处的环境来更改邮件递送的行为。

例如,

if Rails.env.test?
   UserMailer.mail_template().deliver_now
else
   UserMailer.mail_template().deliver_later
end

尽管您的测试实际给您带来的价值值得怀疑