我如何对django网址进行单元测试?

mes*_*shy 45 django tdd unit-testing django-urls

除了我之外,我在我的应用程序中实现了100%的测试覆盖率urls.py.您对我如何为我的网址编写有意义的单元测试有什么建议吗?

FWIW这个问题出现了,因为我正在尝试测试驱动开发,并希望在编写代码来修复它们之前进行失败的测试.

kar*_*ikr 59

一种方法是reverseURL名称和验证

urlpatterns = [
    url(r'^archive/(\d{4})/$', archive, name="archive"),
    url(r'^archive-summary/(\d{4})/$', archive, name="archive-summary"),
]
Run Code Online (Sandbox Code Playgroud)

现在,在测试中

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/')
Run Code Online (Sandbox Code Playgroud)

你可能正在测试这些观点.

现在,要测试URL是否连接到右视图,您可以使用 resolve

from django.urls import resolve

resolver = resolve('/summary/')
assertEqual(resolver.view_name, 'summary')
Run Code Online (Sandbox Code Playgroud)

现在在变量resolver(ResolverMatch类实例)中,您有以下选项

 'app_name',
 'app_names',
 'args',
 'func',
 'kwargs',
 'namespace',
 'namespaces',
 'url_name',
 'view_name'
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考我的同事采用了这个概念,并在[[断言]](https://github.com/incuna/incuna-test-utils/blob/master/incuna_test_utils/testcases/urls.py#L8)中为[我们新的unittest测试工具库](https://github.com/incuna/incuna-test-utils). (2认同)
  • 我正在使用:`assertEqual(resolver.func.func_name,'archive')`来测试解析器是否落在正确的视图上.据我所知,`resolver.view_name`实际上是url规则的名称,而不是视图. (2认同)