Я пишу тесты, где проходит каждый тест, кроме PUT
from django.test import TestCase
from rest_framework.test import APIClient
class ViewTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.client = APIClient()
def setUp(self):
"""setUp() runs before every single test method."""
self.user_data = {'first_name': "John", 'last_name': "Doe", 'email_id': "john@doe.com",
'phone_number': "987654321", 'is_verified': False}
self.response = self.client.post(
reverse('create'),
self.user_data,
format='json')
def test_api_can_update_user(self):
user = User.objects.get()
changes = {'first_name': "Johnny"}
changed_user_data = {**self.user_data, **changes}
response = self.client.put(
reverse('details', kwargs={'email': user.email_id}),
changed_user_data,
format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
Этот тестовый пример завершается неудачно с response.status_code = 415 (неподдерживаемый тип носителя)
тогда как, если я просто переместлю инициализацию клиента из setUpTestData () в setUp ()
все проходит.
def setUp(self):
self.client = APIClient() # Test case passed now.
...
Существуют другие тесты для GET, POST, DELETE, которые все проходят
независимо от того, является ли экземпляр клиента общим (setUpTestData) или нет.
PS: все API, включая PUT, работают из представления DRF Web API.