ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?

Ben*_*enU 21 actionmailer rspec-rails sendgrid ruby-on-rails-3

新用户注册我的小应用程序必须得到管理员(我)的批准才能访问该网站.我已成功使用after_create :send_admin_email我的用户模型在开发中生成此类电子邮件,该模型非常有效.我的问题是我在测试期间(使用FactoryGirl)生成了多个用户,并且每个创建的测试用户都会发送一封真实的电子邮件.运行我的测试就像在1月份浇糖蜜,我必须删除发送到我收件箱的数百封电子邮件.我怎么把它关掉?

Rails指南中的Action Mailer Basics告诉我"默认情况下,Action Mailer不会在测试环境中发送电子邮件.它们只是添加到ActionMailer :: Base.deliveries数组中."

而且,config/environments/test.rb我有:

config.action_mailer.delivery_method = :test
Run Code Online (Sandbox Code Playgroud)

这是除了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
Run Code Online (Sandbox Code Playgroud)

我确信我错过了一些简单而基本的东西.我已经搜索了相关问题和帖子处理如何测试ActionMailer实际发送电子邮件.

对任何想法或帮助提前谦卑的感激.

附录:回答类似问题的答案是否有可能在开发黄瓜测试时关闭ActionMailer电子邮件?我能够阻止发送疯狂的电子邮件.不过,我不得不添加ActionMailer::Base.delivery_method = :test几个rspec文件.有没有办法可以在全球范围内关闭它?有人对发生的事情有任何想法吗?

Ben*_*enU 36

所以我已经明白了.将ActionMailer::Base.delivery_method = :smtpconfig/environment.rb中的行覆盖ActionMailer::Base.delivery_method = :test在config/environments/test.rb中.

因此,ActionMailer::Base.delivery_method = :smtp' 从config/environment.rb中删除该行,并将其放在config/environments/production.rb中.这允许您将ActionMailer::Base.delivery_method = :testconfig/environments/test.rb和您想要的版本放在config/environments/development.rb中.:test当我使用Faker填充我的数据库并将其更改为时,我创建了development.rb ,smtp因此我确信真正的电子邮件是作为附加检查发送的.

注意:必须重新启动服务器才能使这些更改生效.

另一个注意事项: Heroku的当前SendGrid指令将SendGrid Heroku配置代码放在一个新的config/initializers/mail.rb文件中,这可能需要删除它的最后一行并在每个config/environments/[production.rb,development中放置所需的版本. rb,test.rb]


brn*_*lvn 14

也许有用......

我到config/environment.rb并没有包含ActionMailer::Base.delivery_method = :smtp和我的配置/环境/ test.rb 没有包含ActionMailer::Base.delivery_method = :test但Rails的还是邮寄交付测试时.

我只是将以下内容添加到config/environments/test.rb来修复:

config.action_mailer.perform_deliveries = false
Run Code Online (Sandbox Code Playgroud)