测试Django电子邮件后端

在我的settings.py中,我把:

EMAIL_BACKEND = 'mailer.backend.DbBackend'

因此,即使从django.core.mail导入send_mail导入,send_mail函数仍然会将数据库中的电子邮件排队,而不是立即发送.

它在实际运行网站时工作得很好,但在测试网站和访问一些触发电子邮件的网页时,电子邮件不再排队了:

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

为什么它在测试时似乎没有使用后端? (从邮件程序本身导入send_mail会使测试通过,但我无法真正更改其他邮件应用程序的导入,例如django-templated-email)

最佳答案
根据这个question,当测试’django.core.mail.backends.locmem.EmailBackend’时,django会覆盖setting.EMAIL_BACKEND.它也在django docs here中.

转载注明原文:测试Django电子邮件后端 - 代码日志