发送电子邮件时测试失败:发送邮件需要SMTP To地址.设置消息smtp_envelope_to,to,cc或bcc地址

ham*_*ady 3 rspec ruby-on-rails actionmailer capybara

我有一个用户模型的after_create回调,它将向管理员发送一封电子邮件,以便他可以批准该帐户.它在开发模式下完美运行,但是当我运行我的Capybara/RSpec测试时,它失败并出现以下异常:

ArgumentError:
   An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.
Run Code Online (Sandbox Code Playgroud)

我确实将config.action_mailer.delivery_method设置为:test in config/environments/test.rb.为什么它在测试环境中尝试使用SMTP?为什么这只发生在这个电子邮件传递(在模型中)但不与其他传递(使用设计宝石)?

以下是User模型的代码段:

class User < ActiveRecord::Base
  after_create :send_admin_mail
protected

  def send_admin_mail
    puts ActionMailer::Base.delivery_method  #prints test!
    ReviewMailer.new_user_waiting_for_approval(self).deliver
  end
end
Run Code Online (Sandbox Code Playgroud)

Die*_*zar 6

尝试设置:

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

在您的 test.rb 文件中,如果它不存在,请添加它。

  • 我不会将禁用错误消息称为解决问题的好方法。它们很可能仍未解决。就我而言,这样的错误确实意味着我没有正确地将地址传递给或从地址传递给邮寄者。 (9认同)

jvn*_*ill 5

错误说你错过了一个to地址.由于您正在向管理员发送电子邮件,我猜这封电子邮件根据Rails环境而有所不同,您可以在某处配置此电子邮件.确保为测试环境配置了一个.