在 Travis 上测试 Actionmailer-CI

Testing Actionmailer on Travis-CI

我在 Rails 模型中有一些这样的代码:

after_update :email_edits

def email_edits
    EditsMailer.with(record_id: id, user_id: user.id).record_modified.deliver_later
end

这很容易在本地进行单元测试,例如

email = EditsMailer.with(record_id: records(:one).id,
                         user_id: users(:one).id).record_modified

assert_emails 1 do
   email.deliver_now
end

...但是,当它被推送到 Travis-CI 并且测试 运行 时不可避免的结果是:

1 emails expected, but 0 were sent.
Expected: 1
Actual: 0

集成测试也失败了。

我看到过测试是否将电子邮件添加到 ActiveJob 队列或覆盖 deliver_later 以便在测试中使用 deliver_now 的建议,但我已经在使用 deliver_now它仍然失败。即使 Travis 不允许发送电子邮件,我希望 config/environments/test.rb 中的 config.action_mailer.delivery_method = :test 仍然有效。

我想到的另一种可能的解决方法是尝试禁用 Travis 上的那些特定测试,但这并不令人满意。任何人都可以提出可能是什么问题吗?

最终找到答案:

config.action_mailer.perform_deliveries = false

仅在 Travis 环境中设置,因为凭证文件中的变量在那里不可用。