23

我的小应用程序的新注册用户必须得到管理员(我)的批准才能访问该站点。我已经成功地在我的用户模型中生成了这样的电子邮件after_create :send_admin_email,效果很好。我的问题是我在测试期间生成了多个用户(使用 FactoryGirl),并且创建的每个测试用户都会发送一封真实的电子邮件。运行我的测试就像在一月份倒糖蜜,我必须删除发送到我收件箱的数百封电子邮件。我该如何关闭它?

Rails Guides中的Action Mailer Basics告诉我“默认情况下,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 实际发送的电子邮件。

提前对任何想法或帮助表示谦卑的感谢。

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

4

3 回答 3

40

所以我想通了。将 config/environment.rb 中的行ActionMailer::Base.delivery_method = :smtp覆盖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 = :test在 config/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]

于 2012-06-10T15:48:57.367 回答
16

也许有用...

我的 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
于 2015-06-14T01:09:23.470 回答
0

我在 Rails4.2(ActiveJob 与 ActionMailer 的集成)中遇到了类似的情况,即使我没有在 config/environment.rb 中编写 delivery_method = :smtp。

就我而言,这里的问题发生在使用“resque”作为后台工作人员之后。最后,我发现以下配置是错误的:

配置/初始化程序/active_job.rb:

Rails.application.config.active_job.queue_adapter = :resque   # here is WRONG

...因为它也影响了测试模式。

所以,我只在 config/environments/{development,production.rb} 中设置了“queue_adapter = :resque”。现在,这按我的预期工作。

于 2017-12-22T05:52:20.593 回答