Для представления списка DRF он реагирует на несколько данных.
Что что мне делать, если я предполагаю, что объект response.data представляет собой модель со многими полями?
Код: Выделить всё
response.data --> [{"id": 1, "field1": "xxx", "field2": "yyy"....}, {"id": 2, ...}, ...]
Код: Выделить всё
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)
Я собираюсь провести тест на логика получения списка голодных собак.
Код: Выделить всё
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)
- response --> Ответ
- expected_response --> Queryset
Я подумал о двух способах:
- Применить сериализатор к Queryset для сравнения. --> (Serializer(expected_response, Many=True))
- Сравнить значения первичного ключа.
Код: Выделить всё
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