[英]OrderedDict in Django tests
I have such Django tests我有这样的 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"],
)
And got such error并得到这样的错误
E AssertionError: [OrderedDict([('uuid', 'e58fecc0-d559-41af[23258 chars]))])] != [{'uuid': 'e58fecc0-d559-41af-993b-9519309[17732 chars]0.0}]
How can be OrderedDict be removed or transformed?如何删除或转换 OrderedDict?
Obviously:明显地:
self.assertEqual(dict(serializer.data), response.json()["results"], msg="Please dont forget an error message")
But it is not so obviously:但这并不是那么明显:
AssretEqual
falls if the compared dictionaries are with different order.如果比较的字典具有不同的顺序,则AssretEqual
下降。 And in your case - you should check the value of uuid
, not the dictionaries themselves.在您的情况下-您应该检查uuid
的值,而不是字典本身。
self.assertEqual(serializer.data['uuid'], response.json()["results"]['uuid'], msg="Please dont forget an error message")
Thanks to @Headmaster comment: You should check, if you have really dictionary or list of dictionaries.感谢@Headmaster评论:如果你真的有字典或字典列表,你应该检查一下。 It depends on your serializer.__class__
.这取决于您的serializer.__class__
。
Answer was even simpler.答案就更简单了。 Instead of response.json()
response.data
should be used, because response.data
returns same as serializer.data应该使用response.data
而不是response.json()
,因为response.data
返回与 serializer.data 相同
The final result will be最终结果将是
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"],
)
And test passes.并且测试通过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.