dans mes paramètres.py, je mets: donc même lorsque l'importation de Cela fonctionne très bien lorsque vous exécutez le site Web, mais lorsque vous testez le site Web, et accédez à des pages Web qui déclenchent des courriels, des courriels ne sont plus file d'attente: p> Comment se fait-il qu'il ne semble pas utiliser le backend lors de l'essai? (Importation à partir de django.core.mail imported_mail code>, le
send_mail < / Code> Fonction Toujours files d'attente de l'e-mail dans la base de données au lieu de l'envoyer immédiatement. P>
send_mail code> à partir de
Le mailer code> est lui-même obtenant les tests à passer, mais je ne peux pas vraiment modifier les importations d'autres applications de diffusion telles que
django-modemplas-e-mail code>) p> p>
4 Réponses :
Selon ce Question Django remplace le paramètre.email_backend code> Lorsque vous testez sur
'django.core.mail.backend.locmem.emailbackend' code>. C'est aussi dans le Django Docs ici . p>
Vous avez travaillé avec cette réponse: Stackoverflow.com/a/15053970/257583 . Merci beaucoup!!
Pour tester correctement le courrier électronique avec Django-Mailer, vous devez remplacer deux paramètres:
Si vous ne définissez pas le backend Django-Mailer (numéro 2), vos tests tenteront d'envoyer le courrier électronique pour réel. P>
Vous devez également simuler l'exécution de Django-Mailer Commande de gestion Send_mail afin que vous puissiez vérifier mail.outbox pour le bon courrier électronique. p>
Voici un exemple de la configuration d'une méthode de test: P>
from mailer.engine import send_all @override_settings(EMAIL_BACKEND='mailer.backend.DbBackend') @override_settings(MAILER_EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend') def test_email(self): # Code that generates email goes here. send_all() # Simulates running django-mailer's send_mail management command. # Code to check the email in mail.outbox goes here.
Si vous voulez vraiment avoir l'envoi d'e-mails (comme par défaut) via SMTP dans les tests Django, utilisez le décorateur:
from django.test.utils import override_settings @override_settings(EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend') class TestEmailVerification(TestCase): ...
Essayez ce qui suit:
django.core.mail.backends.console.EmailBackend
Quel est l'avantage pour cela sur django.core.mail.backend.locmem.emailbackend code>, comme articulé dans L'accepté Réponse à partir de sept ans?
@Alexanderafanasiev Oui, j'ai le backend de travail lors de l'exécution du site Web avec
Runserver code>; Cela ne fonctionne tout simplement pas lorsque vous effectuez des tests unitaires, pour une raison quelconque.