#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, или он указан в содержимом запроса.