除了urls.py
之外,我在我的应用程序中实现了100%的测试覆盖率。您对我如何为我的网址编写有意义的单元测试有任何建议吗?
FWIW这个问题出现了,因为我正在尝试使用测试驱动开发,并希望在编写代码来修复它们之前进行失败的测试。
答案 0 :(得分:54)
一种方法是reverse
网址名称并验证
实施例
urlpatterns = [
url(r'^archive/(\d{4})/$', archive, name="archive"),
url(r'^archive-summary/(\d{4})/$', archive, name="archive-summary"),
]
现在,在测试中
from django.urls import reverse
url = reverse('archive', args=[1988])
assertEqual(url, '/archive/1988/')
url = reverse('archive-summary', args=[1988])
assertEqual(url, '/archive-summary/1988/')
您可能正在测试视图。
现在,要测试网址是否连接到右侧视图,您可以使用resolve
from django.urls import resolve
resolver = resolve('/summary/')
assertEqual(resolver.view_name, 'summary')
现在在变量resolver
(ResolverMatch
类实例)中,您有以下选项
'app_name',
'app_names',
'args',
'func',
'kwargs',
'namespace',
'namespaces',
'url_name',
'view_name'
答案 1 :(得分:0)
只需补充@karthikr的答案(基于他的答案)
->您可能会断言负责解决问题的视图就是您期望使用resolver.func.cls
示例
from unittest import TestCase
from django.urls import resolve
from foo.api.v1.views import FooView
class TestUrls(TestCase):
def test_resolution_for_foo(self):
resolver = resolve('/api/v1/foo')
self.assertEqual(resolver.func.cls, FooView)