如何在 Django 测试 REST 框架 APIClient post 方法中授权用户
How to authorize user in Django testing REST framework APIClient post method
有人可以帮助我吗?我无法在 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)
断言错误
断言错误: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 基础测试 class 中。因此,您可以专注于测试
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
有人可以帮助我吗?我无法在 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)
断言错误
断言错误: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 基础测试 class 中。因此,您可以专注于测试
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