8

我在 Django 框架中制定了测试用例。

用例:我正在使用 API 通过向他们发送电子邮件来注册用户,当他们点击电子邮件中提供的链接时,他们的帐户就会被激活。

在我的 settings.py 我正在使用

EMAIL_FILE_PATH  ='django.core.mail.backends.filebased.EmailBackend'

它指向本地目录。

从 Eclipse 运行 PyUnit 测试用例时,一切正常文件。为发送的每封电子邮件生成文本文件

但是,当我使用

python ./manage.py test <component_name>

文件不会生成。

任何见解当我执行测试用例时./manage.py和使用时有什么区别pyUnit

4

2 回答 2

38

如果您想使用特定的电子邮件后端,可以在 Django 中覆盖此方面。

在 django.test.utils 中,当 Django 设置测试环境时,Django 会将电子邮件后端更改为 Django 测试文档中提到的 locmem:

def setup_test_environment():
...
    mail.original_email_backend = settings.EMAIL_BACKEND
    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'

因此,如果您想启用发送电子邮件进行测试,您只需将设置更改为您想要的。

from django.test.utils import override_settings

@override_settings(EMAIL_BACKEND='django.core.mail.backends.filebased.EmailBackend')
class MyTest(TestCase):
    # your test case
于 2013-02-24T16:43:47.457 回答
7

简单的答案:

如果不设计自己的电子邮件系统,就无法做到这一点,但这可能很愚蠢。我建议做其他事情来验证代码是否成功,而无需发送电子邮件。例如,运行代码,假设用户单击链接并创建 RequestFactory 以获取/发布链接以运行与其关联的视图代码。

Django 测试应用程序

电子邮件服务

"If any of your Django views send email using Django's email functionality,
you probably don't want to send email each time you run a test using that
view. For this reason, Django's test runner automatically redirects all
Django-sent email to a dummy outbox. This lets you test every aspect of
sending email -- from the number of messages sent to the contents of each
message -- without actually sending the messages."
于 2012-12-12T21:32:31.657 回答