ArgumentError:SMTP 收件人地址不能为空:[]

Phi*_*hil 5 ruby rspec ruby-on-rails rspec-rails

在这里有点困惑,我正在我的 rails 应用程序上运行 rspec 测试并有一个模型规范:

it { should validate_uniqueness_of(:email).case_insensitive }
Run Code Online (Sandbox Code Playgroud)

这是电子邮件对象的 1 of3 测试,它不断失败并出现以下错误:

1) User should validate that :email is case-insensitively unique
 Failure/Error: it { should validate_uniqueness_of(:email).case_insensitive }

 ArgumentError:
   SMTP To address may not be blank: []
 # ./spec/models/user_spec.rb:43:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在模型中测试该电子邮件地址需要任何 SMTP TO 地址。

不知道看什么帮助会很好,因为这是我唯一失败的测试:(

只有我认为可能有帮助的其他东西是我运行:

  • 红宝石 v2.5.0p0
  • 导轨 v5.1.6
  • RSpec 3.7
    • rspec 核心 3.7.1
    • rspec-期望 3.7.0
    • rspec 模拟 3.7.0
    • rspec-rails 3.7.2
    • rspec 支持 3.7.1

Jon*_*ern 9

它似乎会抛出看似不相关的元素的错误。但问题实际上出在您添加的用于发送电子邮件的代码中。您需要回顾一下实际发送电子邮件的代码并检查“收件人:”属性。

就我而言,我收到了一些关于工厂的投诉,这些投诉毫无意义……至少一开始不是。

An error occurred in a `before(:suite)` hook.
Failure/Error: FactoryBot.lint

FactoryBot::InvalidFactoryError:
  The following factories are invalid:

  * attachment - SMTP To address may not be blank: [] (ArgumentError)
  * distance - SMTP To address may not be blank: [] (ArgumentError)
  * structure - SMTP To address may not be blank: [] (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

然后我挖得更深。我追踪到了邮件程序代码的错误,或者我是这么想的:

admins = @organization.users.where(role: "org_admin").map(&:email)
mail(to: admins, subject: "New Structure Created")
Run Code Online (Sandbox Code Playgroud)

但随后其他测试仍然失败。

事实证明,有时由于某些测试中不存在电子邮件和电子邮件(因为这些测试不需要它们),因此有时会丢失to:为该字段传递的实际值。因此,我通过简单的检查“保护”了对邮件程序的调用:adminsif

mail(to: admins, subject: "New Structure Created") if admins.any?
Run Code Online (Sandbox Code Playgroud)