【发布时间】:2017-08-10 18:06:08
【问题描述】:
我正在使用pytest-django 来测试一些 Django 视图。
我想测试响应上下文是否包含某些值,但它始终是None。
我的看法:
from django.views.generic import TemplateView
class MyView(TemplateView):
template_name = 'my_template.html'
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['hello'] = 'hi'
return context
我的测试:
def test_context(client):
response = client.get('/test/')
print('status', response.status_code)
print('content', response.content)
print('context', response.context)
如果我使用-s 标志运行此程序以查看打印语句,则状态代码为200,content 包含呈现的模板,包括上下文中的"hi"。但是context 是None。
我认为这个 client 与 django.test.Client 相同,这应该让我看到上下文......那我错过了什么?
我试过this answer,但得到了
RuntimeError: setup_test_environment() 已被调用,如果不先调用 teardown_test_environment() 就无法再次调用。
【问题讨论】:
-
您是否正在使用超级用户创建设置?因为有时你的应用程序没有找到这个。你能否展示更多关于你的类Test和你的urls.py,而不是使用硬编码url尝试使用
from django.core.urlresolvers import reverse。 -
不,这是一个可公开访问的页面。通常我会在测试中使用
reverse(),并在这里尝试过同样的效果,我只是尽可能简化事情以尝试找到问题。 -
你能插入更多关于这个测试代码的信息吗?
-
我不确定你想看什么。我已经展示了整个视图和整个测试。
-
您可以尝试使用
django.test import TestCase并创建一个继承此的类,此方法继承test_context(self)。因为显然,这种方法是可以的。我不知道您是如何将客户传递给此的。
标签: python django pytest-django