【问题标题】:How to Unittest autocomplete.Select2QuerySetView (Django autocomplete light)如何对 autocomplete.Select2QuerySetView 进行单元测试(Django 自动完成灯)
【发布时间】:2019-06-28 19:58:31
【问题描述】:

我正在使用 Django 包 Django Auto Complete light,这是我的使用方法:

urls.py 我使用:

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

然后在 views.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

最后我在我的 forms.py 中使用它,让用户过滤使用它。

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

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

使用 Coverage 包它表明我的测试没有覆盖线:

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

如何在课堂上达到这部分并进行测试?

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    您需要在测试调用中设置自动补全文本(查询参数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 为假,并且在测试期间不会调用以下行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 2013-08-29
      • 2010-11-24
      • 2011-02-23
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      相关资源
      最近更新 更多