Rails 根据请求规范测试发送电子邮件
Rails test sending emails on request specs
我正在使用 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
。
事实证明,我的初始化程序覆盖了 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/
文件。
我正在使用 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
。
事实证明,我的初始化程序覆盖了 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/
文件。