Rails 4 在“测试”环境下发送电子邮件

3
每次我运行测试的时候,实际上都会发送电子邮件。我的 config/environments/test.rb 配置如下:
config.action_mailer.delivery_method = :test

我认为每次运行测试时,它们不应该被真正地发送,而是在运行命令时。

RAILS_ENV="test" rake test

邮件一定会发送。我曾经认为也许我没有使用正确的环境。但是,之后我完全删除了db/test.sqlite3后再次运行测试。文件又被恢复了,这证明我实际上是在test环境中运行的。
发生了什么?为什么我的测试会发送真实邮件?这是否与我在应用程序中使用的deliver_now有关?

你的 environment.rb 或者一些初始化文件中是否有另一个 config.action_mailer.delivery_method 语句? - Roope Hakulinen
不,我没有了。 - Enrique Moreno Tent
3个回答

4
你至少应该能够通过放置

来禁用它们。
config.action_mailer.perform_deliveries = false

在您的environments/test.rb中,正如 Brent Sullivan 他的回答中所建议的那样。


神奇!谢谢!仍然很奇怪,:test不起作用,但是这个可以 :) - Enrique Moreno Tent

2
config/environment.rb中写入ActionMailer::Base.delivery_method = :smtp会覆盖config/environments/test.rb中的ActionMailer::Base.delivery_method = :test
请删除config/environment.rb中的ActionMailer::Base.delivery_method = :smtp,并将其添加到config/environments/production.rb。这样,您就可以在config/environments/test.rb中放置ActionMailer::Base.delivery_method = :test,并在config/environments/development.rb中使用所需版本。

0

这是针对Rails 6的,但我认为它可能会帮助遇到这个问题的人。

请确保将以下内容放入您的config/environments/test.rb文件中:

  config.action_mailer.delivery_method = :test
  config.active_job.queue_adapter = :test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接