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 に答える