我已经开始使用自定义上下文处理器将对象传递给每个响应。唯一的问题是我的测试现在失败了,因为他们在数据库中找不到这个对象。我尝试使用请求工厂创建测试,因为我的理解是这将测试与 Django 膨胀(如中间件等)隔离开来。我猜上下文处理器仍在运行。有没有办法克服这个问题?我是否必须将这个对象传递给每个测试?如果有任何方法可以避免它,我宁愿这样做。
user1428660
问问题
1474 次
2 回答
2
经过进一步调查,我认为最好的解决方案是在每次测试期间覆盖 context_processors 元组。从 1.4 开始,这已经成为可能。这似乎比向每个测试发送所需的对象要好。我想调查一下我是否可以为它编写一个自定义装饰器,但对它们还不够了解。参考:https ://docs.djangoproject.com/en/dev/topics/testing/overview/#overriding-settings
编辑:此处概述的此解决方案的另一个实现:如何在 Django 中使用不同的设置进行单元测试?可能会更好,因为它可以用于整个 tests.py
编辑2:发现装饰器实际上是python结构(假设它们是自定义的django功能!顺便说一下,python的大量新手。在我学习任何python之前学习了django),我认为自定义装饰器是我将要使用的方式.
edit3:我认为实际上更简单的解决方案是在我的设置模块中有一个 test.py 文件,并用测试中的测试设置覆盖我的基本设置 context_processor 模块。例如:
from settings import localsettings
from settings import testsetttings
localtestsettings.context_processors = testsettings.context_processors
tests(unittest):.....
任何其他建议都非常受欢迎。
编辑4:好的。我现在觉得很傻。显然,我最终使用的解决方案是创建一个测试设置文件,并将其传递给测试命令。
于 2013-07-25T01:04:25.533 回答
2
在tests.py上使用它对我来说很好
from django.test import TestCase, Client, override_settings
@override_settings (
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
)
class HomeViewTestCase(TestCase):
...
于 2017-02-15T02:30:54.230 回答