Как авторизовать пользователя в REST-фреймворке тестирования Django пост-методом APIClient
Может кто-нибудь помочь мне. Я не могу авторизовать своего тестового пользователя в unittests
class APIGameTestCase(APITestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='123')
self.token = Token.objects.get(user=self.user)
self.api_authentication()
def api_authentication(self):
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)
def test_create_game(self):
url = reverse('game-list')
payload = {
'name': 'testgame',
'game_category': 'testgamecategory',
'played': False,
'release_date': '2016-06-21T03:02:00.776594Z',
}
response = self.client.post(url, payload)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Обнаружена ошибка
AssertionError: 401 != 201
models.py
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
Есть лучший способ сделать это. Вы можете использовать client.force_authenticate. Это включено в класс DRF Base test. Благодаря этому вы можете сосредоточиться на тестировании
class APIGameTestCase(APITestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='123')
self.client.force_authenticate(self.user)
def test_create_game(self):
url = reverse('game-list')
payload = {
'name': 'testgame',
'game_category': 'testgamecategory',
'played': False,
'release_date': '2016-06-21T03:02:00.776594Z',
}
response = self.client.post(url, payload)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Подробнее об этом вы можете прочитать здесь: https://www.django-rest-framework.org/api-guide/testing/#forcing-authentication