Как я могу протестировать удаление представления в приложении 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, или он указывается в содержимом запроса.