M. *_*ter 5 python django tdd django-views python-3.x
我正在通过 Harry JW 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})
Run Code Online (Sandbox Code Playgroud)
以及以下 Django 测试:
def test_uses_list_template(self):
list_ = List.objects.create()
response = self.client.get('/lists/%d' % (list_.id,))
self.assertTemplateUsed(response, 'list.html')
Run Code Online (Sandbox Code Playgroud)
urls.py 有以下条目:
url(r'^lists/(.+)/$', views.view_list, name='view_list'),
Run Code Online (Sandbox Code Playgroud)
测试失败并出现以下错误:
self.fail(msg_prefix + "No templates used to render the response")
AssertionError: No templates used to render the response
Run Code Online (Sandbox Code Playgroud)
这是非常令人惊讶的,因为当我使用浏览器手动评估它时,视图渲染成功。并且自动化功能测试没有错误。
我查看了 HTTP 服务器,它显示了与此测试类似的情况的重定向: [time] "GET /lists/2 HTTP/1.1" 301 0 [time] "GET /lists/2/ HTTP/1.1" 200 476
测试失败的原因有些随意,即 URL 不是/lists/%d(/lists/%d/请注意第二个 URL 上的尾部斜杠)。因此,self.client.get导致重定向 (301) 而不是成功 (200)。使用末尾的斜杠更改测试。
response = self.client.get('/lists/%d/' % (list_.id,))
Run Code Online (Sandbox Code Playgroud)
另请注意,Percival 在obeythetestinggoat.com上指出“Django 有一些内置代码,每当有人请求几乎正确的 URL(除了缺少斜杠之外)时,都会发出永久重定向 (301)”。
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |