在Django单元测试用例中处理可选的url参数

时间:2014-11-21 11:04:18

标签: python django unit-testing django-tests

我创建了一个带有可选参数

的动态网址

例如,如果我的网址是 www.example.com/getTest/1 / 现在,url中的这个1是可选的,要在我使用的非像

的视图中处理它
def function(request, id=None):
   pass

因此,如果URL中没有id,那么该功能仍适用于我。 但是在单元情况下测试时我遇到了问题。 如果我使用url作为url = reverse('yescourse:academypage_url', args=[None])它会给我错误

NoReverseMatch: Reverse for 'academypage_url' with arguments '('new', None)' and keyword arguments '{}' not found.

所以请告诉我如何在测试用例或反向中处理这些可选URL。

修改:

 url(r'^getTest/(?P<action>\w+)/(?P<id>\d*)$', 'app.views.create_edit_academypage', name='academypage_url'),

1 个答案:

答案 0 :(得分:5)

您使视图函数的id参数可选,但它在url模式中不是可选的。您渴望将模式重写为:

r'^getTest/(?P<action>\w+)/(?P<id>\d+)?$'

=&GT;整个'id'子模式是可选的,但如果它不是必须匹配一个或多个数字。

完成后,您可以通过不传递任何argskwargs参数来反转网址:

url = reverse('yescourse:academypage_url')

或传递空名单

url = reverse('yescourse:academypage_url', args=[])

或传递None

url = reverse('yescourse:academypage_url', args=None)
通过传递包含None的列表