Я тестирую функции Rails 4 приложений Sidekiq в отношении отправки электронных писем. У меня простой вопрос. Мой работникRSpec и Sidekiq: выполнение почтовых сообщений электронной почты, чтобы вы могли протестировать их содержимое.
def perform(response_id)
response = Response.find(response_id)
micropost = response.micropost
if response && micropost
MicropostMailer.notify_question_followers_of_response(micropost, response, micropost.user.email).deliver_now unless micropost.user == response.user
micropost.followers.select{|follower| follower != response.user}.map{|follower|MicropostMailer.notify_question_followers_of_response(micropost, response, follower.email).deliver_now}
end
end
Отправляет несколько писем, как вы можете видеть. Детали не так важны (я думаю).
expect { MicropostWorker.perform_async(@answer.id) }.to change(MicropostWorker.jobs, :size).by(1)
... делает то, что он должен.
Но я хочу ознакомиться с особенностями электронных писем, чтобы проверить, что они подходят людям. Каждый раз, когда я ...
expect(ActionMailer::Base.deliveries.length).to eq(3)
например, я получаю 0, что, я полагаю, связано с тем, что электронные письма не отправляются немедленно. Как я «выполнить асинхронную отправку» в тесте, так что я могу смотреть на эти электронные письма
Я видел
perform_enqueued_jobs do
expect(ActionMailer::Base.deliveries.length).to eq(3)
end
В другой вопрос, но я думаю, что это старый ....
в этом случае вы можете запустить работу «инлайн», который будет запускать их сразу, и, следовательно, вы получите возможность проверить специфику электронной почты. проверить эту страницу https://github.com/mperham/sidekiq/wiki/Testing –