相关疑难解决方法(0)

Django 1.4 - assertQuerysetEqual - 如何使用方法

我想知道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)

testing django django-queryset

20
推荐指数
2
解决办法
4270
查看次数

比较django TestCase中的查询集

我有一个非常简单的观点如下

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)

django compare django-queryset testcase

18
推荐指数
2
解决办法
8504
查看次数

标签 统计

django ×2

django-queryset ×2

compare ×1

testcase ×1

testing ×1