首页 > 解决方案 > django allauth 登录测试无法正确登录

问题描述

我正在尝试为 django allauth 编写登录测试,但尽管应用程序正常运行并且我可以登录,但当我编写登录测试时,它无法正确登录,并且Response didn't redirect as expected: Response code was 200 (expected 302) 302 != 200由于验证错误而出现断言错误`'The e-您指定的邮件地址和/或密码不正确'

(目前 test_login 失败,但其他两个测试通过)

在这里查看 django all-auth 中的测试: https ://github.com/pennersr/django-allauth/blob/master/allauth/account/tests.py 我可以看到他们还在测试登录时创建了一个 EmailAddress 对象 -我不确定为什么或是否需要这样做?

class TestLoginView(TestCase):

    def setUp(self):
        self.client = Client()
        self.username = "test@test.com"
        self.password = "password"
        user = get_user_model().objects.create_user(self.username, self.password)
        # EmailAddress.objects.create(user=user, email=self.username, primary=True, verified=True)

    def test_login(self):
        response = self.client.post(reverse(
            settings.LOGIN_URL), {"login": self.username, "password": self.password}
        )
        self.assertRedirects(response, settings.LOGIN_REDIRECT_URL, fetch_redirect_response=False)

    def test_wrong_login(self):
        response = self.client.post(reverse(
            settings.LOGIN_URL), {"login": "bad@login.com", "password": "wrong"}
        )
        validation_error = 'The e-mail address and/or password you specified are not correct'
        assert validation_error in response.content.decode('utf-8')

    def test_redirect_when_authenticated(self):
        self.client.force_login(self.user)
        resp = self.client.get(reverse(settings.LOGIN_URL))
        url = settings.LOGIN_REDIRECT_URL + '/' + self.username + '/' + 'detail'
        self.assertRedirects(resp, url, fetch_redirect_response=False)

标签: pythondjango

解决方案


将用户创建更改为使用关键字 args 修复了它,即:

self.user = get_user_model().objects.create_user(username=self.username, password=self.password)

或者,您也可以删除单独的电子邮件模型创建,然后执行

get_user_model().objects.create_user(username=username,  email=username, password=password)

推荐阅读