让用户使用django-social-auth登录

时间:2012-12-20 01:22:11

标签: django django-socialauth django-users django-login django-unittest

我设置了一个单元测试:

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成立?我只是想测试一下,当用户登录时,我的视图会正确显示,而不是特别关心登录实际有效的单元测试。

1 个答案:

答案 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)

正常工作