【发布时间】:2015-07-12 07:56:28
【问题描述】:
我有以下测试用例
def testNoAccessWithoutLogin(self):
"""
Tests that redirected to the login page if you are not logged in
"""
response = self.client.get(reverse('expenseList'), follow=True)
expected_url = reverse('login') + "?next=" + reverse('expenseList')
self.assertRedirects(response, expected_url, status_code=302,
target_status_code=200)
expected_url = reverse('login') + "?next=" + reverse('purchaseList')
response = self.client.get(reverse('purchaseList'), follow=True)
self.assertRedirects(response, expected_url, status_code=302,
target_status_code=200)
# end testNoAccessWithoutLogin
我失败了
================================================ ===================== 失败:testNoAccessWithoutLogin (procurement.tests.expenseTests) -------------------------------------------------- -------------------- Traceback(最近一次调用最后一次):文件 “/Users/jason/public_html/activity/project/procurement/tests.py”,行 66、在testNoAccessWithoutLogin target_status_code=200)文件“/Users/jason/.virtualenvs/activity/lib/python2.7/site-packages/django/test/testcases.py”, 第 304 行,在 assertRedirects 中 (url, expected_url)) AssertionError: 响应重定向到'http://testserver/login/?next=%2Fprocurement%2FexpenseList%2F', 预期'http://testserver/login/?next=/procurement/expenseList/'
我认为这是因为“%2F”不等于“/”,但为什么响应的 url 被引用了?
被测试的函数用
装饰@login_required
【问题讨论】:
-
你还没有说
expenseList是如何进行重定向的。你在使用login_required装饰器吗?它需要对查询字符串参数进行urlencode,以防它们包含#或&等字符,但是,正斜杠should not be quoted。 -
是的,expenseList 用@login_required 修饰。我尝试在 expected_url 上使用 urllib.quote 和 unquote 以使其匹配,但这不起作用。