Django使用额外的GET参数测试命名URL

时间:2012-02-23 10:45:33

标签: django testing reverse

我正在尝试为我正在处理的Django应用程序编写一些测试,但我还没有确定我想要为每个视图使用的确切网址。因此,我在测试中使用了命名网址。

例如,我有一个名为dashboard的网址:

c = Client()
resp = c.get(reverse('dashboard'))

此视图仅供登录用户使用。如果当前用户是匿名用户,则应将其重定向到登录页面,该页面也是名为url的登录页面。但是,当它执行此操作时,它使用额外的GET参数来跟踪它刚刚来自的URL,从而产生以下结果:

/login?next=dashboard

当我尝试测试此重定向时,由于这些附加参数而失败:

# It's expecting '/login' but gets '/login?next=dashboard'
self.assertRedirects(resp, reverse('login'))

显然,如果我将它们硬编码到测试中,它就可以工作:

self.assertRedirects(resp, '/login?next=dashboard')

但是,如果我决定更改仪表板视图的URL,我必须更新使用它的每个测试。

我能做些什么来更容易处理这些额外的参数吗?

任何建议表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:5)

如您所见,reverse(...)返回字符串,您可以使用:

self.assertRedirects(resp, '%s?next=dashboard' % reverse('login'))