Тестовый блок Django вошел в систему под пользователем

Мне нужно несколько модульных тестов, чтобы проверить, может ли пользователь после успешного входа открыть страницу редактирования профиля, как я должен это сделать?

Я попробовал этот код, но он показывает ошибку. Должен ли я использовать собственное представление для регистрации пользователя, а затем для входа в систему или для этого есть какие-либо модули модульного тестирования?

class UserProfilePage(TestCase):

    def setUp(self):
        self.credentials = {
            'username': 'test_user',
            'password': 'secret'}
        user = User.objects.create_user(**self.credentials)

        self.user_profile = {
            'user': user,
            'first_name': 'Test_1',
            'surname': 'test_surname',
            'about_me': 'some_info',
            'email': 'test@anymail.com',
        }
        UserProfile.objects.create(**self.user_profile).save()

        self.user_id = UserProfile.objects.get(user=user)

    def test_profile_page_and_current_template(self):
        response = self.client.get('/blog/user/profile/', self.user_id)
        self.assertEqual(response.status_code, 200)

ValueError: Cannot query "Test_1": Must be "User" instance.

API клиента позволяет войти в систему пользователю следующим образом:

self.client.force_login(user)

Просто запустите это перед тем, как зайти на страницу профиля в вашем тесте.

В вашем коде также есть ошибка.

...
self.user_id = UserProfile.objects.get(user=user)
...

Здесь вы присваиваете объект профиля user_id, а затем пытаетесь передать user_id в качестве параметра в запросе, вместо ID пользователя. Я предполагаю, что именно поэтому вы получаете ошибку.

Я бы предложил установить только user как свойство объекта; больше вам ничего не нужно. Затем обратитесь к нему с помощью self.user.id в вашем тесте.

См. также: https://docs.djangoproject.com/en/4.0/topics/testing/tools/#django.test.Client.force_login

Вернуться на верх