【发布时间】: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