Доставить позже не работает в тестовой среде в Rails 5
По сути, с настройкой теста, точно настроенной в Rails 4 (метод доставки установлен как тест и т. Д.), Кроме устаревших опций, которые я заменил, почта отправляется только с delivery_now, а не delivery_later. Deliver_later работает в среде разработки, даже если конфигурация одинакова для двух сред.
Конфигурация почтовой программы для тестирования:
config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
config.action_mailer.perform_caching = false
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
2 ответа
У меня та же проблема, и я вместо этого прибегнул к использованию утверждений на
enqueued_jobs.size
чтобы утверждать, что моя почта была в очереди. Кроме того, у меня есть модульные тесты в классе почтовой программы, где я использую delivery_now.
Это требует включения ActiveJob:TestHelper
class ActiveSupport::TestCase
include ActiveJob::TestHelper
end
Другой вариант для тестирования электронных писем, которые используют delivery_later (Активное задание), заключается в том, чтобы поместить код, который вы хотите выполнить сейчас (а не в очередь), и ваши утверждения в блок execute_enqueued_jobs. Это также требует добавления включения в верхней части вашего тестового файла чуть ниже определения класса
include ActiveJob::TestHelper
Тогда что-то вроде ниже.
perform_enqueued_jobs do
post article_url, params: { article: { title: "Learn Testing", body: "Lorem Ipsum" } }
assert_not_equal 0, ActionMailer::Base.deliveries.size
end