Nel mio settings.py, ho messo:test Django email backend
EMAIL_BACKEND = 'mailer.backend.DbBackend'
Così, anche quando l'importazione da from django.core.mail import send_mail
, la funzione send_mail
accoda ancora in piedi l'e-mail nel database invece di inviarlo immediatamente.
Funziona bene quando effettivamente in esecuzione il sito web, ma durante il test del sito, e l'accesso alcune pagine web che attivano messaggi di posta elettronica, messaggi di posta elettronica non sono più in coda più:
def test_something(self):
...
# Check no emails are actually sent yet
self.assertEquals(len(mail.outbox), 0) # test fails here -- 2 != 0
# Check queued emails.
messages = Message.objects.all()
self.assertEquals(messages.count(), 2) # test would also fail here -- 0 != 2
...
Come mai non sembra stai usando il backend quando sta testando? (Importazione send_mail
da mailer
si ottiene i test di passare, ma non può davvero cambiare le importazioni di altre applicazioni come mailing django-templated-email
)
FYI, vedere http://stackoverflow.com/questions/11919118/replace-django-core-mail-send-mail-across-all-apps. – alecxe
@AlexanderAfanasiev sì, ho il backend in funzione quando eseguo il sito web con 'runserver'; semplicemente non funziona quando si effettuano i test unitari, per qualsiasi motivo. – wrongusername