Я работаю над своим первым проектом, который использует Django REST Framework, и у меня возникают проблемы с тестированием API. Я получаю 403 Запрещенные ошибки вместо ожидаемых 200 или 201. Однако API работает так, как ожидалось.тестирование Django REST Framework
Я прошел через DRF Testing docs, и все это кажется простым, но я считаю, что мой клиент не входит в систему. Обычно в моих проектах Django я использую смесь заводского мальчика и веб-сайта django, который у меня был много счастливого успеха. Я не нахожу того же счастья, тестируя API DRF через пару дней возиться.
Я не уверен, что это проблема, связанная с чем-то, что я делаю неправильно с DRF APITestCase/APIClient или проблемой с тестом django в целом.
Я просто вставляю следующий код и не отправляю сериализаторы/виды, потому что API работает в браузере, похоже, что у меня просто проблемы с аутентификацией APIClient в APITestCase.
# settings.py
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
# tests.py
from django.test import TestCase
from rest_framework.test import APITestCase, APIClient
from accounts.models import User
from .factories import StaffUserFactory
class MainSetUp(TestCase):
def setUp(self):
self.user = StaffUserFactory
self.api_root = '/api/v0/'
self.client = APIClient()
class APITests(MainSetUp, APITestCase):
def test_create_feedback(self):
"""
Ensure we can create a new account object.
"""
self.client.login(username='staffuser', password='staffpassword')
url = '%sfeedback/' % self.api_root
data = {
'feedback': 'this is test feedback'
}
response = self.client.post(url, data, user=self.user)
self.assertEqual(response.status_code, 201)
self.assertEqual(response.data, data)
# factories.py
from factory.django import DjangoModelFactory
from django.contrib.auth import get_user_model
User = get_user_model()
class UserFactory(DjangoModelFactory):
class Meta:
model = User
class StaffUserFactory(UserFactory):
username = 'staffuser'
password = 'staffpassword'
email = '[email protected]'
first_name = 'Staff'
last_name = 'User'
is_staff = True