I'm wondering how the TestCase.assertQuerysetEqual method works. I tried it in different ways, each of them leading me to another error message.
#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)
Error Message for Number1:
First list contains 21 additional elements. First extra element 1: node.pk: 2 - node: node2 - pk: 2 - level: 0 - ancestor: 2
Error Message for Number 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
Thanks for hints how to use the assertQuerysetEqual method correctly.
assertQuerysetEqual
takes a queryset
, a list of values and a transform
callable which is called on the queryset to convert it into something comparable to the list of values. By default this callable is repr
. This is kind of irritating since it doesn't actually compare two querysets, but the easy fix for most cases is using map(repr, your_second_queryset)
for the list of values. This is documented in django since version 1.3.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With