检查模板是否失败,因为"没有用于呈现响应的模板"

时间:2017-03-09 02:34:20

标签: python django python-3.x django-views tdd

我正在使用Harry J. W. Percival的Python测试驱动开发。我有一个Django视图,代码如下:

def view_list(request, list_id):
        list_ = List.objects.get(id=list_id)
        items = Item.objects.filter(list=list_)
        return render(request, 'list.html', {'items':items})

以下Django测试:

def test_uses_list_template(self):
        list_ = List.objects.create()
        response = self.client.get('/lists/%d' % (list_.id,))
        self.assertTemplateUsed(response, 'list.html')

urls.py包含以下条目:

url(r'^lists/(.+)/$', views.view_list, name='view_list'),

测试失败,出现以下错误:

self.fail(msg_prefix + "No templates used to render the response")
AssertionError: No templates used to render the response

这非常令人惊讶,因为当我使用浏览器手动评估视图时,视图呈现成功。并且自动功能测试无误地工作。

我查看了HTTP服务器,它显示了与此测试类似的情况的重定向: [时间]" GET / lists / 2 HTTP / 1.1" 301 0 [时间]" GET / lists / 2 / HTTP / 1.1" 200 476

1 个答案:

答案 0 :(得分:3)

测试失败的原因是URL为/lists/%d而不是/lists/%d/(请注意第二个URL上的尾部斜杠。)因此self.client.get导致了重定向(301)而不是成功(200)。最后使用斜杠更改测试。

response = self.client.get('/lists/%d/' % (list_.id,))

另请注意,在obeythetestinggoat.com Percival状态" Django有一些内置代码可以发出永久重定向(301),只要有人要求提供几乎正确的URL,除了缺少斜杠。 "