Случай Django APITest не возвращает ничего в запросе get
Я разрабатываю API с помощью Django, и я также хочу протестировать его, но у меня есть некоторые проблемы с этим. Мне нужно проверить, что по заданному URL возвращается то, что я ожидаю, и я хочу сделать это с помощью APITestCase из django rest framework.
Конечная точка - это нечто подобное: http://localhost:5000/api/v1/rest_of_url/
Когда я набираю его в браузере, он возвращает что-то похожее:
{"count": 1, "next": null, "previous": null, "results": [{"stuff": 3, "stuff2": "adf", "stuff3": "asdf", "stuff4": "ff"}]}
Итак, чтобы проверить это, я написал следующий код в Django:
class TargetApiTestCase(APITestCase):
def test_get(self):
response = self.client.get("/api/v1/rest_of_url/", format='json')
print(response)
print(response.content)
print(response.status_code == status.HTTP_200_OK)
В ответ я получаю следующий вывод из операторов prints:
<JsonResponse status_code=200, "application/json">
b'null'
True
Но мне нужно получить некоторые данные, чтобы проверить. Я знаю, что после этого я должен запросить базу данных для проверки и использовать self.assertEqual
, но пока моя проблема заключается в получении данных через get
Возможно, это всего лишь проблема настроек.
Я попытался потребовать responde.data, но он ответил с ошибкой.
Пожалуйста, кто-нибудь может мне помочь? Спасибо
Я не смог ничего получить, потому что база данных, используемая для тестирования, является только кэшированной базой данных, созданной и удаленной сразу после выполнения теста.
Итак, если вы хотите получить или использовать какие-то данные, вам нужно поместить их в базу данных с помощью метода startUp.
Примером для Django может быть размещение их с помощью некоторого запроса Django ORM, а затем их проверка, как в следующем примере:
class TestApiEndpoint(APITestCase):
name = "test"
surname = "test"
description = "Very long text as description"
def setUp(self):
CustomUser.objects.create(
name=self.name,
surname=self.surname,
description=description,
)
def test_get(self):
response = self.client.get("/api/v1/rest_of_url/", format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
data = response.json()["results"]
self.assertEqual(len(data), 1)
self.assertEqual(data[0]['name'], self.name)
....