新注册我的小应用程序的用户必须经过管理员(我)的批准才能访问该网站。我已经在用户模型中使用 after_create :send_admin_email
成功生成了这样的电子邮件,效果非常好。我的问题是,我在测试期间生成多个用户(使用 FactoryGirl),并且创建的每个测试用户都会发送一封真实的电子邮件。运行我的测试就像在一月份倒糖蜜一样,我必须删除发送到我的收件箱的数百封电子邮件。我该如何关闭它?
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
。
所以,删除该行,ActionMailer::Base.delivery_method = :smtp'
从 config/environment.rb 并将其放置在 config/environments/development.rb 中。
这允许您将 ActionMailer::Base.delivery_method = :test
放置在 config/environments/test.rb 中,并将您想要的版本放置在 config/environments/development.rb 中。当我使用 Faker 填充数据库并将其更改为 smtp
时,我制作了development.rb :test
,因此我确信发送了真实的电子邮件作为额外检查。
注意:您必须重新启动服务器才能使这些更改生效。
另一条注释:Heroku's current SendGrid Instructions将 SendGrid Heroku 配置代码放入新的 config/initializers/mail.rb 文件中,这可能需要删除其最后一行并将所需的版本放入每个 config/environments/[生产.rb,development.rb,test.rb]
关于ruby-on-rails-3 - ActionMailer 在测试模式下发送真实的电子邮件! - 如何关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961982/