gpt4 book ai didi

用于发送电子邮件的 Django 测试

转载 作者:行者123 更新时间:2023-12-04 05:45:30 25 4
gpt4 key购买 nike

我需要测试邮件是从 Django 1.8 应用程序发送的;文档清楚地说明了如何执行此操作,例如
https://docs.djangoproject.com/en/stable/topics/testing/tools/#email-services
因此,这里有一些代码就足够了:

from myapp.utils.mailutils import mail as mymail
from django.core import mail

def testThisFails(self):
user = User.objects.filter(id=1).__getitem__(0)
mymail(user,'Test Message','Test message content, please ignore...')
self.assertEquals(len(mail.outbox), 1)
self.assertEquals(mail.outbox[0].subject, 'Test Message')
...显然,我也有适当的测试。无论如何,我什么也没有得到:
self.assertEquals(len(mail.outbox), 1)
AssertionError: 0 != 1
这是一个类似的问题,提到需要使用 locmail 后端:
Django 1.3: Outbox empty during tests
因此,我将其添加到 settings.py 中:
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
if TESTING:
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
...没有运气。甚至省略了 if TESTING没有解决这个问题。有什么方法可以让我的测试直接使用这个后端?

最佳答案

使用 self.settings 用于覆盖设置的上下文管理器

def testThisFails(self):
# do first here
user = User.objects.filter(id=1).__getitem__(0)
with self.settings(EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend'):
mymail(user,'Test Message','Test message content, please ignore...')
self.assertEquals(len(mail.outbox), 1)
self.assertEquals(mail.outbox[0].subject, 'Test Message')

还有使用 firstget而不是 __getitem__ .这是做 [0]的神奇方法称呼
user = User.objects.filter(id=1).first()

关于用于发送电子邮件的 Django 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com