我以两种方式为单元测试创建了用户:
1)为“auth.user”创建一个fixture,大致如下:
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "homer",
"is_active": 1,
"password":
"sha1$72cd3$4935449e2cd7efb8b3723fb9958fe3bb100a30f2",
...
}
}
我忽略了那些看似不重要的部分。
2)在设置功能中使用“创建用户”(尽管我宁愿保留 我的固定装置课程中的所有内容):
def setUp(self):
User.objects.create_user('homer', 'ho...@simpson.net', 'simpson')
注意,在这两种情况下,密码都是辛普森。
我已经一次又一次地验证了这个信息被正确地加载到测试数据库中。我可以使用User.objects.get获取用户对象。我可以使用“check_password”验证密码是否正确。用户处于活动状态。
然而,self.client.login(username='homer',password='simpson')总是失败。我不明白为什么。我想我已经读过每一个与此相关的网络讨论。有人能帮忙吗?
我的单元测试中的登录代码如下所示:
login = self.client.login(username='homer', password='simpson')
self.assertTrue(login)
谢谢。
你能查一下吗
这个测试用例对我有用。
不起作用的代码:
为什么不起作用?
在上面的代码片段中,当创建
User
时,实际的密码散列设置为12345
。当客户机调用login
方法时,password
参数的值12345
通过hash函数传递,结果如下然后将其与存储在数据库中的散列进行比较,并拒绝客户端访问,因为
'adkfh5lkad438....' != '12345'
解决方案
正确的做法是调用
set_password
函数,该函数通过哈希函数传递给定的字符串,并将结果存储在User.password
中。此外,在调用
set_password
之后,我们必须将更新的User
对象保存到数据库:一个更简单的方法是使用^{} ,Django 1.9中的新功能。
例如:
相关问题 更多 >
编程相关推荐