Tatiana, miembro de nuestro staff, nos hizo el favor de crear esta sección ya que conoce perfectamente dicho tema.
Solución:
El marco de prueba de Django tiene algunos ayudantes incorporados para ayudarlo a probar el servicio de correo electrónico.
Ejemplo de documentos (versión corta):
from django.core import mail
from django.test import TestCase
class EmailTest(TestCase):
def test_send_email(self):
mail.send_mail('Subject here', 'Here is the message.',
'[email protected]', ['[email protected]'],
fail_silently=False)
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].subject, 'Subject here')
Puede usar un servidor de archivos para enviar correos electrónicos, lo cual es una solución muy útil para el desarrollo y las pruebas; ¡los correos electrónicos no se envían sino que se almacenan en una carpeta que puede especificar!
Si está interesado en realizar pruebas unitarias, la mejor solución es utilizar el backend en memoria proporcionado por django.
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
Tomemos el caso de usarlo como un py.prueba accesorio
@pytest.fixture(autouse=True)
def email_backend_setup(self, settings):
settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
En cada prueba, el mail.outbox
se reinicia con el servidor, por lo que no hay efectos secundarios entre las pruebas.
from django.core import mail
def test_send(self):
mail.send_mail('subject', 'body.', '[email protected]', ['[email protected]'])
assert len(mail.outbox) == 1
def test_send_again(self):
mail.send_mail('subject', 'body.', '[email protected]', ['[email protected]'])
assert len(mail.outbox) == 1