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"],
)
И тест пройден.