Как я могу протестировать удаление представления в приложении Django?

Я хочу протестировать свой View, но у меня проблема с функцией delete.

   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'

Можете ли вы, пожалуйста, помочь мне с моим тестом?

Поскольку данные закодированы в request.GET, это должно быть закодировано в строке запроса, так:

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

Однако довольно странно определять это в строке запроса. Обычно используется параметр URL, или он указывается в содержимом запроса.

Вернуться на верх