ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?相关的知识,希望对你有一定的参考价值。
新用户注册我的小应用程序必须得到管理员(我)的批准才能访问该网站。我已经成功地使用我的用户模型中的after_create :send_admin_email
在开发中生成此类电子邮件,这非常有用。我的问题是我在测试期间(使用FactoryGirl)生成了多个用户,并且每个创建的测试用户都会发送一封真实的电子邮件。运行我的测试就像在1月份浇糖蜜,我必须删除发送到我收件箱的数百封电子邮件。我怎么把它关掉?
Action Mailer Basics中的Rails Guides告诉我“默认情况下,Action Mailer不会在测试环境中发送电子邮件。它们只是添加到ActionMailer :: Base.deliveries数组中。”
而且,在config/environments/test.rb
,我得到了:
config.action_mailer.delivery_method = :test
这是在config/environment.rb
的补充:
# Configuration for using SendGrid on Heroku
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => 'app[my app number]@heroku.com',
:password => '[something super secret]',
:domain => '[let's get this party started!.com]',
:enable_starttls_auto => true
}
ActionMailer::Base.delivery_method = :smtp
我确信我错过了一些简单而基本的东西。我已经搜索了相关问题和帖子处理如何测试ActionMailer实际发送电子邮件。
对任何想法或帮助提前谦卑的感激。
附录:在回答Is it possible to turn off ActionMailer emails when cucumber testing is happening on development?发现的类似问题后,我能够阻止电子邮件发送疯狂。不过,我不得不将ActionMailer::Base.delivery_method = :test
添加到几个rspec文件中。有没有办法可以在全球范围内关闭它?有人对发生的事情有任何想法吗?
所以我已经明白了。在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中。这允许您将ActionMailer::Base.delivery_method = :test
放在config / environments / test.rb中,并在config / environments / development.rb中放置所需的版本。当我使用Faker填充我的数据库并将其更改为:test
时,我制作了development.rb smtp
,因此我确信真正的电子邮件是作为附加检查发送的。
注意:必须重新启动服务器才能使这些更改生效。
另一个注意事项:Heroku's current SendGrid Instructions将SendGrid Heroku配置代码放入新的config / initializers / mail.rb文件中,该文件可能需要删除其最后一行并在每个config / environments / [production.rb,development.rb,test中放置所需的版本.RB]
也许有用......
我的config / environment.rb不包含ActionMailer::Base.delivery_method = :smtp
,我的config / environments / test.rb确实包含ActionMailer::Base.delivery_method = :test
,但Rails在测试时仍然提供邮件。
我只是将以下内容添加到config / environments / test.rb来修复:
config.action_mailer.perform_deliveries = false
即使我没有在config / environment.rb中编写delivery_method =:smtp,我在Rails4.2(ActiveJob与ActionMailer的集成)中遇到了类似的情况。
就我而言,这里的问题发生在使用“resque”作为后台工作者之后。最后,我发现以下配置错误:
配置/初始化/ active_job.rb:
Rails.application.config.active_job.queue_adapter = :resque # here is WRONG
...因为它也影响了测试模式。
所以,我只在config / environments / {development,production.rb}中设置“queue_adapter =:resque”。现在,这正如我所料。
以上是关于ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?的主要内容,如果未能解决你的问题,请参考以下文章
使用 rspec 进行 ActionMailer 测试 [关闭]