我想知道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)
Run Code Online (Sandbox Code Playgroud)
Number1的错误消息:
First list contains 21 additional elements.
First extra element 1:
node.pk: 2 - node: node2 - pk: 2 - level: 0 - ancestor: 2
Run Code Online (Sandbox Code Playgroud)
第2个错误消息:
AssertionError: Lists differ: ['<Tree: node.pk: 1 - node: …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的观点如下
def simple_view(request):
documents = request.user.document_set.all()
return render(request, 'simple.html', {'documents': documents})
Run Code Online (Sandbox Code Playgroud)
为了在我的测试用例中测试上面的视图,我有以下方法出错.
Class SomeTestCase(TestCase):
# ...
def test_simple_view(self):
# ... some other checks
docset = self.resonse.context['documents']
self.assertTrue(self.user.document_set.all() == docset) # This line raises an error
# ...
Run Code Online (Sandbox Code Playgroud)
我得到的错误是AssertionError: False is not true.我尝试打印两个查询集,两者完全相同.False当两个对象相同时,为什么会返回?有任何想法吗 ?
目前为了克服这一点,我使用了一个讨厌长度的讨厌的黑客如下:
ds1, ds2 = self.response.context['documents'], self.user.document_set.all()
self.assertTrue(len([x for x in ds1 if x in ds2]) == len(ds1) == len(ds2)) # Makes sure each entry in ds1 exists in ds2
Run Code Online (Sandbox Code Playgroud)