2012-07-23 17 views
18

TestCase.assertQuerysetEqual yönteminin nasıl çalıştığını merak ediyorum. Bunu farklı yollarla denedim, her biri beni başka bir hata mesajına yönlendirdi. Number1 içinDjango 1.4 - assertQuerysetEqual - yöntem nasıl kullanılır?

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

hata iletisi: Sayı 2 için

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

hata iletisi: doğru assertQuerysetEqual yöntemi kullanma ipuçları

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 

teşekkür ederiz.

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

biraz garip ve belgesiz var;:

cevap

12

bu deneyin ama bu senin için çalışmalı.

27

assertQuerysetEqual, değerler bir listesi ve değerler listesinde karşılaştırılabilir bir şey haline dönüştürmek için sorgu kümesi üzerinde denir bir transform çağrılabilir bir queryset sürer. Varsayılan olarak bu callable repr'dur. Bu aslında iki querysets karşılaştırmak değil, çoğu durumda için kolay düzeltme değerleri listesi için map(repr, your_second_queryset) kullanıyor çünkü bu rahatsız edici bir tür. Bu documented in django since version 1.3.

+0

Netleştirdiğiniz için teşekkürler! –

+1

python 3 + django 1.5'i kullanarak 'map (repr, your_second_queryset) 'i kullanmalısınız, çünkü assertQuerysetEqual queryset'i bir listeye dönüştürür. –

İlgili konular