【发布时间】:2019-02-19 16:15:41
【问题描述】:
我有一个使用内置登录系统的 Django 应用程序。
我正在尝试编写一个单元测试来验证 login url 是否重定向到 home 如果用户已经通过身份验证。这意味着,如果已通过身份验证的用户尝试访问 login 网址,他们将被重定向到 home。
这是 Django 的LoginView 的内置功能,我已经验证它确实可以工作。但是,我不确定如何为此编写单元测试。
问题:如何通过单元测试验证此重定向是否发生? LoginView 返回一个TemplateResponse,它没有url 参数。
到目前为止,我所拥有的是:
from django.test import TestCase
from django.urls import reverse
home = reverse('home')
login = reverse('login')
logout = reverse('logout')
signup = reverse('signup')
USER_CREDS = { some users credentials }
class TestLoginView(TestCase):
def test_login_redirect(self):
self.client.post(signup, USER_CREDS)
self.client.get(logout)
self.client.post(login, USER_CREDS)
response = self.client.get(login)
self.assertRedirects(response, home)
编辑:
SimpleTestCase.assertRedirects 不适用于 TemplateResponse 对象。
TemplateResponse 对象不包含url 参数,这是SimpleTestCase.assertRedirect 所必需的。
该方法引发以下错误:AttributeError: 'TemplateResponse' object has no attribute 'url'
这与链接问题不同,因为来自LoginView 的响应对象是TemplateResponse,而不是HttpResponse。
【问题讨论】:
-
@marcanuy 这些不一样,如编辑中所述。感谢您尝试找到合适的答案。