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

#python #django #unit-testing #automated-tests #python-unittest

Вопрос:

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

 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'  

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

Ответ №1:

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

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

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