Django 1.3:测试期间发件箱为空

Pic*_*els 12 django django-testing

也许我不明白outbox是如何工作的,但是从我理解的文档中,它只是在测试期间捕获所有外发邮件.

我用新应用程序创建了一个新项目,并添加了以下代码.

from django.test import TestCase
from django.core.mail import send_mail, outbox

class SimpleTest(TestCase):
    def test_basic_addition(self):
        send_mail('Subject here', 
                  'Here is the message.', 
                  'from@example.com', 
                  ['to@example.com'], 
                  fail_silently=False)

        self.assertEqual( len( outbox ), 1 )
Run Code Online (Sandbox Code Playgroud)

当我运行python manage.py test app_name时,它会给出一个断言错误0!= 1.我做错了什么?

更新

好吧,如果我导入django.core.mail并使用mail.outbox它确实有效,这很奇怪.

试图比较outbox和mail.outbox的直接导入,它们都给出了不同的结果

from django.core import mail
from django.core.mail import send_mail, outbox     
...
self.assertEqual(outbox, mail.outbox)
Run Code Online (Sandbox Code Playgroud)

收益:

- []
+ [<django.core.mail.message.EmailMessage object at 0x1e1fd90>]
Run Code Online (Sandbox Code Playgroud)

也许我一直在努力工作并且遗漏了一些非常明显的东西?

Pic*_*els 18

也许我应该阅读文档.

outbox属性是一个特殊属性,仅在使用locmem电子邮件后端时创建.它通常不作为django.core.mail模块的一部分存在,您无法直接导入它.

https://docs.djangoproject.com/en/dev/topics/testing/overview/#django.core.mail.django.core.mail.outbox

  • 对于像我这样需要详细说明的其他傻瓜:不要使用“from django.core.mail import outbox”。相反,请使用“from django.core import mail”,并在测试中使用“mail.outbox”而不是“outbox”。 (2认同)