Django单元测试响应上下文为None

时间:2014-11-25 20:26:32

标签: python django unit-testing

为什么以下测试中的response.context无?我检查了response.content,它是''。如果我删除assertIsNotNone行我得到一个TypeError:'NoneType'对象不可订阅

def test_log_view_with_no_entries(self):
    """
    If no logs are available, an appropriate message should be displayed.
    """
    response = self.client.get(reverse('swpgr:logs'))
    self.assertIsNotNone(response.context)
    self.assertEqual(response.status_code, 200)
    self.assertContains(response, "No logs are available.")
    self.assertQuerysetEqual(response.context['log_list'], [])

def test_log_view_with_one_entry(self):
    """
    Logs should be displayed it table.
    """
    time = timezone.now()
    t = LogEntry.objects.create(event_date=time, command_type="Test", command_source="Test Case",
        username="user")
    response = self.client.get(reverse('swpgr:logs'))
    self.assertIsNotNone(response.context)
    self.assertQuerysetEqual(
        response.context['log_list'],
        ['<LogEntry: 1 Test user: user>']
    )`

2 个答案:

答案 0 :(得分:4)

我遇到了这个问题并修复了它在setUp函数中执行了以下操作:

from django.test.utils import setup_test_environment
setup_test_environment()

答案 1 :(得分:1)

快速解决方法

还有另一个Context类的成员dict(派生自SimpleTemplateResponse),它被称为 context_data 。使用它而不仅仅是 context 将给出预期的上下文字典(django 1.9)。 但请注意,自django 1.8以来,它被定义为弃用。因此使用它需要您自担风险。不幸的是,直到现在我还没有研究出合适的替代方案。

背景

响应的 context 属性的存在似乎取决于您使用的模板引擎(模板)的类型。 如果你选择的是另一个引擎而不是django(默认)的引擎,你可能会在 context_data 属性

找到dict

参考