【问题标题】:Rails test sending emails on request specsRails 测试根据请求规范发送电子邮件
【发布时间】:2019-03-06 20:50:21
【问题描述】:

我正在使用rails 4.2.4,我正在尝试测试是否在请求规范中发送了一封电子邮件。

it "sends a reset password email to the user" do
  expect do
    post users_reset_password_path, params, headers
  end.to change(ActionMailer::Base.deliveries, :size).by(1)
end

这导致:

end.to change(ActionMailer::Base.deliveries, :size).by(1)

expected `Array#size` to have changed by 1, but was changed by 0

我确定我的电子邮件正在发送,因为我在 log/test.log 中看到了它。所以我的问题是,发生这种情况是因为它是request 规范吗?如果是这样,我如何测试在请求规范中发送电子邮件? ActionMailer::Base.deliveries 是否仅在邮件规范中更新?

为了提供更多上下文,我正在使用 devise 在控制器中我调用user.send_reset_password_instructions

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rspec rspec-rails


    【解决方案1】:

    事实证明,我的初始化程序覆盖了config/environments/test.rb 中的配置。在邮件规范中这很好,因为ActionMailer::TestCase 强制ActionMailer::Base.delivery_method:test。在请求规范中,这不会发生。

    无论如何我不得不这样做:

    diff --git a/config/initializers/mail.rb b/config/initializers/mail.rb
    deleted file mode 100644
    index 4b8000f..0000000
    --- a/config/initializers/mail.rb
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -ActionMailer::Base.smtp_settings = {
    -    :address              => "example.com",
    -    :port                 => 587,
    -  } 
    - 
    -ActionMailer::Base.delivery_method = :smtp
    

    并将这些设置添加到每个config/environment/ 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多