Доставить позже не работает в тестовой среде в 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
Другие вопросы по тегам