Тестовый блок 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