Django:测试客户端的上下文是空的

时间:2009-12-19 11:47:39

标签: django unit-testing testing

我无法从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和单元测试之间表现不一致?

1 个答案:

答案 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时总是收集这些信息,而不仅仅是在测试中。