12
votes

Test Django Email Backend

dans mes paramètres.py, je mets: xxx

donc même lorsque l'importation de à partir de django.core.mail imported_mail , 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.

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: xxx

Comment se fait-il qu'il ne semble pas utiliser le backend lors de l'essai? (Importation send_mail à partir de Le mailer 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 )


1 commentaires

@Alexanderafanasiev Oui, j'ai le backend de travail lors de l'exécution du site Web avec Runserver ; Cela ne fonctionne tout simplement pas lorsque vous effectuez des tests unitaires, pour une raison quelconque.


4 Réponses :


30
votes

Selon ce Question Django remplace le paramètre.email_backend Lorsque vous testez sur 'django.core.mail.backend.locmem.emailbackend' . C'est aussi dans le Django Docs ici .


1 commentaires

Vous avez travaillé avec cette réponse: Stackoverflow.com/a/15053970/257583 . Merci beaucoup!!



5
votes

Pour tester correctement le courrier électronique avec Django-Mailer, vous devez remplacer deux paramètres:

  1. Faites les tests pour utiliser le backend Django-Mailer LI>
  2. Faites le backend Djano-Mailer pour utiliser le backend de test LI> ol>

    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.
    


0 commentaires

3
votes

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):
   ...


0 commentaires

0
votes

Essayez ce qui suit:

django.core.mail.backends.console.EmailBackend


1 commentaires

Quel est l'avantage pour cela sur django.core.mail.backend.locmem.emailbackend , comme articulé dans L'accepté Réponse à partir de sept ans?