Django - тестирование электронных писем с помощью почтового ящика с использованием post_office - PullRequest
0 голосов
/ 18 октября 2019

Я пишу тесты для приложения, которое использует пакет django-post_office для большинства своих функций электронной почты.

Библиотека по умолчанию django.core.mail содержит множество полезных инструментов для проверки того, действительно ли отправляются электронные письма. (Без фактической отправки во время тестов)

class TestFunctionThatSendsEmail(Testcase):

   @override_settings(
        EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend'
   )
   def test_function_sends_email(self):
       self.assertEqual(len(outbox), 0)
       run_function_that_calls_email()
       self.assertEqual(len(outbox), 1)
       ...
       # other tests

Однако электронные письма в нашей функции отправляются с функцией django-post_office mail.send()

# priority now to make sure that they are being sent right away
mail.send(
        sender=sender,
        recipients=to,
        context=context,
        template=template_name,
        priority='now',
    )

, которая вызывает тествыше, чтобы потерпеть неудачу, так как по какой-то причине электронные письма не попадают в исходящие.

Странно то, что если я изменю EMAIL_BACKEND на django.core.mail.backends.console.EmailBackend, электронные письма будут отображаться в моем терминале, поэтому он прослушивает настройки EMAIL_BACKEND.

Я пытался найти альтернативные методы / функции для проверки этой функциональности в github django-post_office, но все, что я мог найти, - это совет проверить, сохранены ли электронные письма в базе данных, и проверить их статус. ,(Что я и делал и работает), но тот факт, что django, кажется, не может обнаружить какие-либо электронные письма, которые действительно отправляются, заставляет меня немного нервничать.

Кто-нибудь знает, как сделать так, чтобы электронные письма, отправленные django-post_office, появлялись в папке исходящих сообщений или, если это невозможно, как убедиться, что они действительно отправляются? (помимо проверки базы данных)

...