ActionMailer.deliveries始终是一个空数组

时间:2014-08-11 21:11:41

标签: ruby-on-rails ruby-on-rails-4 rspec postmark

我正在使用Postmark gem进行rails并编写Rspecs测试,以确保在表单有效时实际发送电子邮件。

我想检查一下ActionMailer :: Base.deliveries.last.to与我在联系表单中输入的内容相匹配,我想测试一下。

但是,ActionMailer :: Base.deliveries始终是一个空数组。即使在生产中,在成功发送电子邮件(并在另一端收到)后,当使用rails c production观察时,该数组仍然为空。

我错过了什么?如何验证我的测试中是否已发送电子邮件?

1 个答案:

答案 0 :(得分:1)

ActionMailer::Base.deliveries数组是ActionMailer(docs)提供的:test投放模式的一项功能。如果您在测试环境中启用了Postmark gem,则该数组将始终为空。

除非您的目标是进行完整的集成测试,否则应避免在测试中使用外部服务,并坚持使用:test传递方法。如果你这样做,你可能还想看看email-spec gem,它提供了一个DSL来测试用ActionMailer发送的电子邮件。

如果您确实想要在测试中发送电子邮件,可以使用Postmark Messages Retrieval API通过收件人或邮件ID检索已发送邮件并验证其内容。如果您正在寻找的话,这可以进行完整的黑盒测试。