Django的1.4 - assertQuerysetEqual - 如何使用方法(Djang

2019-06-26 11:59发布

我想知道的TestCase.assertQuerysetEqual方法是如何工作的。 我尝试了不同的方式,他们每个人带我到另一条错误消息。

#create a backup of all records in the tree
tree_record_backup = list(Tree.objects.all())

#do some updates on another table, which should not affect the tree table if everything goes wrong

#check if list of tree records did not changed
tree_record_qs = Tree.objects.all()
#Number1:
self.assertQuerysetEqual(tree_record_qs,[repr(tree_record_backup)])
#Number2:
self.assertQuerysetEqual(tree_record_qs,tree_record_backup)

为数字1出现错误信息:

First list contains 21 additional elements.
First extra element 1:
node.pk: 2 - node: node2 - pk: 2 - level: 0 - ancestor: 2

对于2号错误消息:

AssertionError: Lists differ: ['<Tree: node.pk: 1 - node: ro... != [<Tree: node.pk: 1 - node: roo...

First differing element 0:
<Tree: node.pk: 1 - node: root - pk: 1 - level: 0 - ancestor: 1>
node.pk: 1 - node: root - pk: 1 - level: 0 - ancestor: 1

谢谢你的提示如何正确使用方法assertQuerysetEqual。

Answer 1:

试试这个:

self.assertQuerysetEqual(
    tree_record_qs,
    [repr(r) for r in tree_record_backup]
)

这是一个有点怪异和无证; 但是,这应该为你工作。



Answer 2:

assertQuerysetEqual需要queryset值列表transform可赎回这就是所谓的查询集将其转换成东西比得上值的列表。 默认情况下,这个调用是repr 。 这是一种刺激性的,因为它实际上并没有比较两个查询集,但简单的办法解决大多数情况下是使用map(repr, your_second_queryset)的值的列表。 这是在Django因为1.3版本文档 。



文章来源: Django 1.4 - assertQuerysetEqual - how to use method