【问题标题】:Testing Actionmailer on Travis-CI在 Travis-CI 上测试 Actionmailer
【发布时间】:2020-04-23 19:04:09
【问题描述】:

我在 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 上禁用这些特定测试,但这并不令人满意。谁能提出问题可能是什么?

【问题讨论】:

    标签: ruby-on-rails testing travis-ci actionmailer


    【解决方案1】:

    终于找到了答案:

    config.action_mailer.perform_deliveries = false
    

    由于凭据文件中的变量在 Travis 环境中不可用,因此仅在 Travis 环境中设置。

    【讨论】:

      猜你喜欢
      • 2015-07-28
      • 2020-07-27
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      相关资源
      最近更新 更多