OrderedDict в тестах Django

У меня есть такие тесты Django

queryset = SomeModel.objects.all()
response = self.client.get("some_url")
serializer = SomeSerializer(
    instance=list(queryset[:10]), many=True
)
self.assertEqual(
    serializer.data,
    response.json()["results"],
)

И получил такую ошибку

E   AssertionError: [OrderedDict([('uuid', 'e58fecc0-d559-41af[23258 chars]))])] != [{'uuid': 'e58fecc0-d559-41af-993b-9519309[17732 chars]0.0}]

Как можно удалить или преобразовать OrderedDict?

Очевидно:

self.assertEqual(dict(serializer.data), response.json()["results"], msg="Please dont forget an error message")

Но это не так очевидно:

AssretEqual выпадает, если сравниваемые словари расположены в разном порядке. А в вашем случае - нужно проверять значение uuid, а не сами словари.

self.assertEqual(serializer.data['uuid'], response.json()["results"]['uuid'], msg="Please dont forget an error message")

Ответ был еще проще. Вместо response.json() следует использовать response.data, потому что response.data возвращает то же самое, что и serializer.data

Конечный результат будет

queryset = SomeModel.objects.all()
response = self.client.get("some_url")
serializer = SomeSerializer(
    instance=list(queryset[:10]), many=True
)
self.assertEqual(
    serializer.data,
    response.data["results"],
)

И тест пройден.

Вернуться на верх