Python >> Python-zelfstudie >  >> Python

E-mailverzending testen in Django

Het Django-testraamwerk heeft een aantal ingebouwde helpers om u te helpen bij het testen van de e-mailservice.

Voorbeeld uit documenten (korte versie):

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')

U kunt een bestandsbackend gebruiken voor het verzenden van e-mails, wat een erg handige oplossing is voor ontwikkeling en testen; e-mails worden niet verzonden, maar opgeslagen in een map die u kunt specificeren!


Als je van unit-testing houdt, is de beste oplossing om de in-memory backend van django te gebruiken.

EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'

Neem het geval van gebruik als een py.test armatuur

@pytest.fixture(autouse=True)
def email_backend_setup(self, settings):
    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'  

In elke test wordt de mail.outbox wordt gereset met de server, dus er zijn geen bijwerkingen tussen tests.

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