Элегантный способ добавить тестовый пример просмотра списка в drf ⇐ Python

Программы на Python
Anonymous
Элегантный способ добавить тестовый пример просмотра списка в drf

Сообщение Anonymous »

У меня есть одна проблема при написании тестового кода для представления списка.
Для представления списка DRF он реагирует на несколько данных.
Что что мне делать, если я предполагаю, что объект response.data представляет собой модель со многими полями?

Код: Выделить всё

response.data --> [{"id": 1, "field1": "xxx", "field2": "yyy"....}, {"id": 2, ...}, ...]
Для сравнения со статическими данными требуется слишком много входных данных, когда a возвращает много данных поля.

Код: Выделить всё

def test_xx(self):
self.assertEqual(response.data, [{"id": 1, "field1": "xxx", ..., "field12": "ddd", ...}, ...])
На данный момент я придумал следующее.
Я создал пример модели под названием Dog.

Код: Выделить всё

class Dog(models.Model):
...
hungry = models.BooleanField(default=False)
hurt = models.BooleanField(default=False)
В качестве примера предположим, что есть класс Dog и в View есть логика для получения списка голодных собак.
Я собираюсь провести тест на логика получения списка голодных собак.

Код: Выделить всё

class ...
def test_dog_hungry_list(self):
response = client.get("/api/dog/hungry/")
expected_response = Dog.objects.filter(hungry=True)
self.assertEqual(response.data, expected_response)
Два значения, которые я хочу сравнить с помощью AssertEqual, — ответ и ожидаемый_ответ, — относятся к разным типам.
  • response --> Ответ
  • expected_response --> Queryset
В случае с response.data применяется сериализатор , поэтому, когда он находится в форме dict, я хочу сравнить его с ожидаемым_ответом типа Queryset.
Я подумал о двух способах:
  • Применить сериализатор к Queryset для сравнения. --> (Serializer(expected_response, Many=True))
  • Сравнить значения первичного ключа.
< strong>Пример номер 2.

Код: Выделить всё

expected_response = Dog.objects.filter(hungry=True).values("id")
self.assertEqual(
[data["id"] for data in response.data],
[data["id"] for data in expected_response]
)
Но я не уверен, что эти два метода хороши в сравнении.
Есть ли способ сделать данные более разумными для сравнения, когда тестовый код возвращает два или три данных в виде большого словаря?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ase-in-drf

Вернуться в «Python»