简体   繁体   English

Django 测试中的 OrderedDict

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM