【问题标题】:Rails Test DB populates after setting ActionMailer defaults在设置 ActionMailer 默认值后填充 Rails 测试数据库
【发布时间】:2016-04-04 13:29:58
【问题描述】:

我在我的项目中设置了ActionMailer::Base defaults,如下所示:

class DirectorMailer < ActionMailer::Base
  default to: Director.pluck(:email)
end

当我在development 环境中尝试此操作时,运行成功,因为我的数据库中已经有 Director。当我运行我的测试时会出现问题,因为 ActionMailer 在我填充我的测试数据库之前默认加载,并且设置为一个空数组。我收到以下错误:

ArgumentError:发送邮件需要 SMTP 收件人地址。设置消息 smtp_envelope_to、to、cc 或 bcc 地址。

有没有办法从我的测试中重新加载 ActionMailer::base 默认值?还是应该在每个mail 方法中设置to 参数?

【问题讨论】:

  • 最后,我决定在每个mail 方法中设置to 参数,以获取最新的Director emails 数组,但问题仍未得到解答,所以我将保持开放状态直到我找到解决方法。
  • 我也有同样的问题。看起来我们已经非常规了;)

标签: ruby-on-rails rspec actionmailer


【解决方案1】:

在你的数据库中有记录之前,试试这个来解决你的 ActionMailer 加载问题

before do
  Director.create(email: "admin@example.com")
  ActionMailer::Base.delivery_method = :test
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.deliveries = []  
end

after do
  ActionMailer::Base.deliveries.clear
end

it "..." do
  # perform your test
end

This blog post 被用来帮助回答这个问题。可能对你也有用

【讨论】:

  • 谢谢,但这不起作用,ActionMailer 在运行我的测试之前仍然加载defaults。另外,我已经在我的test.rb 环境文件中设置了ActionMailer::Base.delivery_method = :test,但我还是试试这个......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2011-02-08
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多