我设置了一个单元测试:
class UserViewTests(TestCase):
def setUp(self):
self.user_passwords = '123456'
self.user1 = User.objects.create(username='Bobby Johnson', password=self.user_passwords)
...
def test_view_user(self):
"""
Check that you can view a user's information correctly in their profile
"""
response = self.client.get(reverse('login'))
self.assertContains(response, "You're not logged in yet", status_code=200)
self.client.login(username=self.user1.username, password=self.user_passwords)
response = self.client.get(reverse('login'))
self.assertContains(response, "You've logged in already", status_code=200)
只有最后一个断言失败了,用“你还没有登录”替换“你已登录”,最后一个断言使测试通过,所以看来我的登录失败了。我猜这是因为我使用django-social-auth
来允许OpenId登录。
我怎么能以某种方式让单元测试认为我的用户已经登录,以便user.is_authenticated
成立?我只是想测试一下,当用户登录时,我的视图会正确显示,而不是特别关心登录实际有效的单元测试。
答案 0 :(得分:1)
self.user1 = User.objects.create(username='Bobby Johnson', password=self.user_passwords)
应该是:
self.user1 = User.objects.create_user(username='Bobby Johnson', password=self.user_passwords)
否则密码不会被散列,也无法使用。
您还需要在身份验证后端中显示django.contrib.auth.backends.ModelBackend
。
然后,
self.client.login(username=self.user1.username, password=self.user_passwords)
将正常工作。