2

我这样设置了一个单元测试:

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是真的?我只想测试当用户登录时我的视图是否正确显示,而不是特别关心登录实际工作的单元测试。

4

1 回答 1

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)

行了

于 2012-12-20T01:26:31.043 回答