【问题标题】:Rails 4 sending emails in the "Test" environmentRails 4 在“测试”环境中发送电子邮件
【发布时间】:2015-11-16 10:32:58
【问题描述】:

每次我运行测试时,实际上都会发送电子邮件。我的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 语句?
  • 不,我没有了。

标签: ruby-on-rails email ruby-on-rails-4 testing


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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。这使您可以将ActionMailer::Base.delivery_method = :test 放入config/environments/test.rb,并将您想要的版本放入config/environments/development.rb

    【讨论】:

      【解决方案3】:

      您至少应该能够通过放置来禁用它们

      config.action_mailer.perform_deliveries = false
      

      在您的 environments/test.rb 中,正如 Brent Sullivanhis answer 中所建议的那样。

      【讨论】:

      • 魔术!谢谢! :test 不起作用仍然很奇怪,但这确实有效:)
      猜你喜欢
      • 2016-10-11
      • 2016-02-25
      • 2014-04-04
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2013-10-04
      • 1970-01-01
      相关资源
      最近更新 更多