Ruby on rails 发送电子邮件时测试失败:发送邮件需要SMTP收件人地址。将邮件smtp_信封_设置为、收件人、抄送或密件抄送地址

Ruby on rails 发送电子邮件时测试失败:发送邮件需要SMTP收件人地址。将邮件smtp_信封_设置为、收件人、抄送或密件抄送地址,ruby-on-rails,rspec,capybara,actionmailer,Ruby On Rails,Rspec,Capybara,Actionmailer,我有一个用户模型创建后的回调,将发送电子邮件给管理员,以便他可以批准该帐户。它在开发模式下工作得很好,但当我运行Capybara/RSpec测试时,它失败了,出现以下异常: ArgumentError: An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address. 我在config/environments/test.rb中将confi

我有一个用户模型创建后的回调,将发送电子邮件给管理员,以便他可以批准该帐户。它在开发模式下工作得很好,但当我运行Capybara/RSpec测试时,它失败了,出现以下异常:

ArgumentError:
   An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.
我在config/environments/test.rb中将config.action\u mailer.delivery\u方法设置为:test。为什么它在测试环境中尝试使用SMTP?为什么这种情况只发生在这封电子邮件中(在模型中),而不发生在其他邮件中(使用Desive gem)

以下是用户模型的一个片段:

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
class用户
尝试设置:

config.action_mailer.raise_delivery_errors = false

在test.rb文件中,如果不存在,请将其添加。

错误表明您缺少一个
地址。由于您正在向管理员发送一封电子邮件,我猜这封电子邮件与Rails env不同,您已经在某个地方配置了这封电子邮件。确保为测试环境配置了一个表。

谢谢@jvnill,我的问题是DatabaseCleaner在每次测试之前会截断所有表,因此默认的AdminUser会随之删除。异常中的SMTP这个词把我弄糊涂了,我要改变问题的主题。我不会把禁用错误消息称为解决问题的好方法。很可能这些问题仍然没有解决。在我的情况下,这样一个错误实际上意味着我没有正确地传递给邮寄者,也没有从邮寄者的地址传递给邮寄者。