Я пишу несколько тестов для моей платформы Django Rest и стараюсь, чтобы они были максимально простыми. Раньше я создавал объекты, используя заводского мальчика, чтобы сохранить объекты, доступные для запросов GET.Django Rest Framework тестирование сохраняет данные запроса POST
Почему мои запросы POST в тестах не создают фактический объект в моей тестовой базе данных? Все работает отлично, используя фактический API, но я не могу получить POST в тестах, чтобы сохранить объект, чтобы он был доступен для запросов GET. Есть что-то, что мне не хватает?
from rest_framework import status
from rest_framework.test import APITestCase
# from .factories import InterestFactory
class APITestMixin(object):
"""
mixin to perform the default API Test functionality
"""
api_root = '/v1/'
model_url = ''
data = {}
def get_endpoint(self):
"""
return the API endpoint
"""
url = self.api_root + self.model_url
return url
def test_create_object(self):
"""
create a new object
"""
response = self.client.post(self.get_endpoint(), self.data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data, self.data)
# this passes the test and the response says the object was created
def test_get_objects(self):
"""
get a list of objects
"""
response = self.client.get(self.get_endpoint())
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data, self.data)
# this test fails and says the response is empty [] with no objects
class InterestTests(APITestCase, APITestMixin):
def setUp(self):
self.model_url = 'interests/'
self.data = {
'id': 1,
'name': 'hiking',
}
# self.interest = InterestFactory.create(name='travel')
"""
if I create the object with factory boy, the object is
there. But I don't want to have to do this - I want to use
the data that was created in the POST request
"""
Вы можете увидеть пару строк закомментированного кода, которые объект, который нужно создать через фабричной мальчика, так как объект не получает создан и сохранен (хотя тест создания делает проход и сказать объект создается).
Я не размещал ни один из кода модели, сериализатора или вида, потому что фактический API работает, это вопрос, специфичный для теста.
Содержимое базы данных очищается между каждым методом тестирования. Вам нужен выделенный вспомогательный метод для создания объектов и повторного использования в каждом тестовом случае. – mariodev