首页 > 解决方案 > 如何在 Django 应用程序中测试删除视图?

问题描述

我想测试我的视图,但我的删除功能有问题。

   class AnimalView(APIView):
        def delete(self, request, format = None):              
            id = int(request.GET.get('id'))
            try:
                animal = Animal.objects.get(id=id)
            except:
                return Response(status=status.HTTP_404_NOT_FOUND)
            animal.delete()
            return Response(status=status.HTTP_204_NO_CONTENT)

这是我的模型:

class Animal(models.Model):
    name = models.CharField(unique=True, max_length=30, blank=False, null=False)
    class Meta:
        managed = True
        db_table = 'animal'
        ordering = ['name']
    def __str__(self):
        return str(self.name)

这是我正在尝试进行的测试:

class TestURL(TestCase):
    def setUp(self):
        self.client = Client()
    def test_animal_delete(self):
        animal = Animal.objects.create(name = 'TestAnimal')
        response = self.client.delete(reverse("category_animal"), json.dumps({'id' : animal.id}))
        self.assertEqual(status.HTTP_204_NO_CONTENT,response.status_code )

但我得到一个

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

你能帮我做测试吗?

标签: pythondjangounit-testingautomated-testspython-unittest

解决方案


由于数据是在 中编码的request.GET,因此应该在查询字符串中进行编码,因此:

response = self.client.delete(f'{reverse("category_animal")}?id={animal.id}')

然而,在查询字符串中定义它是很奇怪的。通常使用 URL 参数,或者在请求的内容上指定。


推荐阅读