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

时间:2016-10-07 21:54:00

标签: ruby-on-rails actionmailer rspec-rails

我正在尝试编写一个功能测试,其中用户留下评论,然后通过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

1 个答案:

答案 0 :(得分:0)

您可以随时通过测试正在运行的环境来更改邮件传递的行为。

例如

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

虽然您的测试实际给您的价值是否值得怀疑