2012-07-23 20 views
18

Me pregunto cómo funciona el método TestCase.assertQuerysetEqual. Lo intenté de diferentes maneras, cada una de ellas me llevó a otro mensaje de error.Django 1.4 - assertQuerysetEqual - cómo usar el método

#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) 

mensaje de error para Número1:

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

mensaje de error para el número 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 

Gracias por consejos sobre cómo utilizar el método assertQuerysetEqual correctamente.

Respuesta

12

probar esto:

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

que es un poco raro y no documentada; pero, eso debería funcionar para ti.

27

assertQuerysetEqual toma un queryset, una lista de los valores y un exigible transform que se llama en el conjunto de consultas para convertirlo en algo comparable a la lista de valores. Por defecto, este invocable es repr. Esto es algo irritante ya que en realidad no compara dos conjuntos de consultas, pero la solución fácil para la mayoría de los casos es usar map(repr, your_second_queryset) para la lista de valores. Esto es documented in django since version 1.3.

+0

¡Gracias por aclarar! –

+1

Usando python 3 + django 1.5 debe usar 'map (repr, your_sery_queryset)' porque assertQuerysetEqual convierte queryset en una lista. –

Cuestiones relacionadas