2017-06-12 4 views
0

Ich verstehe nicht, warum, wenn ich den Test ausführen es immer mit AssertionError fehlgeschlagen: 0 = 1 obwohl das Ergebnis von r 1 istPrüfung send_email funktioniert nicht

class UserProfileTaskTest(TestCase): 

    def test_send_email(self): 
     subject = 'subject' 
     body = 'body' 
     from_email = '[email protected]' 
     recipient_list = ['[email protected]'] 

     r = send_mail(
      subject=subject, 
      message=body, 
      from_email=from_email, 
      recipient_list=recipient_list 
     ) 

     print(r) 

     self.assertEqual(len(outbox), 1) 
+0

Was ist Postausgang? – vZ10

+0

Ich wette, sie importieren es so 'von django.core.mail importieren outbox' – Brobin

+0

@Brobin ja ich importiere es so :) Ich fange gerade an zu lernen django Ich wusste nicht, dass es ein besonderes Attribut war. – mengkheang

Antwort

0

Outbox ist besondere Art Attribut, das nicht direkt importiert werden kann, aber wenn Sie E-Mails über das E-Mail-Backend senden, funktioniert mail.outbox als Liste und speichert E-Mail-Daten in der Ausgangsliste. Verwenden Sie das folgende Beispiel, um Testmail zu senden oder nicht.

from django.core import mail 
from django.test import TestCase 

class UserProfileTaskTest(TestCase): 
    def test_send_email(self): 
     subject = 'subject' 
     body = 'body' 
     from_email = '[email protected]' 
     recipient_list = ['[email protected]'] 
     mail.send_mail(
      subject=subject, 
      message=body, 
      from_email=from_email, 
      recipient_list=recipient_list 
     ) 
     self.assertEqual(len(mail.outbox), 1) 

Wenn Sie über Code ausführen haben Sie erste mail.outbox = []

aber nach dem Senden von E-Mail es EmailMessage Instanz in der Liste speichern.

+0

Danke! es funktioniert nur ich habe das Dokument nicht genug gelesen https://docs.djangoproject.com/en/1.11/topics/testing/tools/#email-services – mengkheang