在Travis-CI上测试Actionmailer

问题描述 投票:0回答:1

我在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.action_mailer.delivery_method = :testconfig/environments/test.rb 仍然有效。

我想到的另一个可能的解决方法是尝试在Travis上禁用那些特定的测试,但这将是不满意的。有谁能建议一下,问题可能出在哪里?

ruby-on-rails testing travis-ci actionmailer
1个回答
0
投票

最终找到了答案。

config.action_mailer.perform_deliveries = false

只有在Travis环境下才会被设置,因为凭证文件中的变量在那里不可用。

© www.soinside.com 2019 - 2024. All rights reserved.