测试具有捕获组的Django URL

时间:2013-10-04 20:40:58

标签: python django

我有一个像这样的Django url模式:

url(r'browse/state/(?P<state>\d+)$', browse_state_sites)

编写类似的测试会导致状态匹配查询错误。

def test_browse_state_county_sites(self):
    resp = self.client.get('/browse/state/1')
    self.assertEqual(resp.status_code, 200)

如何传递捕获组以测试路径?

1 个答案:

答案 0 :(得分:4)

将您的网址设为name,如下所示:

url(r'browse/state/(?P<state>\d+)$', browse_state_sites, name='state-detail')

然后在您的测试代码中使用django.core.urlresolvers.reverse,如下所示:

resp = self.client.get(reverse('state-detail', kwargs={
  'state': 12345,
}))

您可能会收到错误GET /browse/state/1/county/1,因为根据您提供的内容,它不匹配。 browse/state/(?P<state>\d+)$正则表达式将匹配任何格式browse/state/<number>的网址 - /county/1将导致匹配失败。