我无法从ipython访问context
对象的HttpResponse
属性。但单元测试访问context
。
这是单元测试。测试运行正确:
from django.test import Client, TestCase
from django.core import mail
class ClientTest(TestCase):
def test_get_view(self):
data = {'var': u'\xf2'}
response = self.client.get('/test04/', data)
# Check some response details
self.assertContains(response, 'This is a test')
self.assertEqual(response.context['var'], u'\xf2')
以下是我在shell中使用的代码:
In [10]: from django.test import Client
In [11]: c = Client()
In [12]: r = c.get('/test04/', data)
In [13]: r.context
In [14]: type(r.context)
Out[14]: <type 'NoneType'>
shell中的 response.context
为none,而单元测试中存在response.context
。
为什么HttpResponse
在shell和单元测试之间表现不一致?
答案 0 :(得分:8)
你可以在Django测试代码中看到它在make template rendering send a signal的特殊工具中进行monkeypatches,test client listens to可以annotate the response object with the rendered templates and their contexts。
要附加此信号,您必须在shell会话中调用django.test.utils.setup_test_environment()函数(具有其他副作用),或者只复制monkeypatch模板渲染的行。不是太难,但我同意如果可以重构这个特定的调试方面以便在测试之外更容易使用它会很好。就个人而言,我不介意在DEBUG为True时总是收集这些信息,而不仅仅是在测试中。