Rails тестирует отправку писем по запросу - PullRequest
0 голосов
/ 01 октября 2018

Я использую 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

Iя уверен, что мое электронное письмо отправляется, потому что я вижу его в log/test.log.Итак, мой квест, это происходит, потому что это request спецификация?Если да, как я могу проверить отправку электронной почты в спецификации запроса?ActionMailer::Base.deliveries обновляется только в спецификациях почтовых программ?

Чтобы получить больше контекста, я использую devise, поэтому в контроллере я звоню user.send_reset_password_instructions.

1 Ответ

0 голосов
/ 03 октября 2018

Оказывается, мои инициализаторы переопределяли конфигурацию в 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/.

...