python - 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)
解决方案
将用户创建更改为使用关键字 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)
推荐阅读
- c# - 调整 Excel FormulaArray 范围的大小以显示所有数据
- xml - 如何将工具提示添加到我的自定义 Excel 功能区 UI?
- generics - 如何扩展'T?
- javascript - heroku 环境变量返回未定义
- go - 为什么 Golang 不能下载某些网页?
- makefile - 为什么makefile中没有扩展变量?
- c++ - Winsock 数据不是从 IP 检索的,而是从普通 URL 检索的
- javascript - 如何使用线程逐行读取文件?
- flowtype - 如何使用 Flow 从对象中获取键及其类型的列表
- r - 如果页面上的持续时间大于某个值,则在点击流数据上创建会话