W moim settings.py, kładę:Testowanie Django email backend
EMAIL_BACKEND = 'mailer.backend.DbBackend'
Więc nawet podczas importowania z from django.core.mail import send_mail
funkcja send_mail
nadal kolejek się e-mail w bazie danych zamiast wysyłać go natychmiast.
To działa dobrze, gdy uruchomiony na stronie internetowej, ale podczas testowania stronie internetowej, i dostępu do pewnych stron internetowych, e-maili, które powodują, e-maile nie są już w kolejce już:
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
...
Jak to się stało, że nie wydaje się korzystać z zaplecza podczas testowania? (Importowanie send_mail
z mailer
sama dostaje testy przekazać, ale nie mogę zmienić importu innych aplikacji mailowych jak django-templated-email
)
FYI, patrz http://stackoverflow.com/questions/11919118/replace-django-core-mail-send-mail-across-all-apps. – alecxe
@AlexanderAfanasiev Tak, mam serwer działający podczas uruchamiania witryny z 'runserver'; po prostu nie działa przy wykonywaniu testów jednostkowych z jakiegokolwiek powodu. – wrongusername