在Travis CI上测试Actionmailer



我在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环境中设置,因为凭据文件中的变量在那里不可用。

相关内容

  • 没有找到相关文章

最新更新