如何进行单元测试自动完成。选择2查询视图(Django自动完成灯)

2024-09-30 14:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Django包Django Auto Complete light,下面是我如何使用它的:

网址.py我使用:

    path('buy-invoice-items-autocomplete/', views.ItemAutoComplete.as_view(), name='buy_invoice_items_autocomplete', ),

然后在视图.py

class ItemAutoComplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        qs = Item.objects.filter().order_by('id')
        if self.q:
            qs = qs.filter(Q(id__iexact=self.q) | Q(name__icontains=self.q))
        return qs

最后我把它用在我的表单.py允许用户使用它进行筛选。你知道吗

现在,当我尝试将其包含在单元测试文件中时,我是这样做的:

class TestItemAutoComplete(TestCase):
    def test_visit(self):
        self.client.get('/buy-invoice-items-autocomplete/')

使用覆盖率包表明我的测试没有覆盖以下行:

        if self.q:
            qs = qs.filter(Q(id__iexact=self.q) | Q(name__icontains=self.q))

如何在课堂上达到这一部分并进行测试?你知道吗


Tags: djangonamepyselfidgetdefitems
1条回答
网友
1楼 · 发布于 2024-09-30 14:16:29

您需要在测试调用中设置自动完成文本(查询参数q),例如:

class TestItemAutoComplete(TestCase):
    def test_visit(self):
        self.client.get('/buy-invoice-items-autocomplete/?q=foo')
        self.client.get('/buy-invoice-items-autocomplete/?q=bar')

否则q将为空,因此if self.q为false,并且在测试期间不会调用下面的行。你知道吗

相关问题 更多 >

    热门问题