@Lepilov

Тестирование POST метода используя unittest Client()?

Не могу понять почему при тестировании метод POST возвращает мне 404 ошибку.
Есть такой класс
class CsvToDatabase(APIView):
    permission_classes = (permissions.AllowAny,)
    serializer_class = VendorsCsvSerializer

    def post(self, request, format=None):
        r_data = request.data
        for data in r_data:
            внутренняя логика
            .....
            serializer = VendorsCsvSerializer(data=data)
            try:
                serializer.is_valid(raise_exception=True)
                serializer.save()
            except ValidationError:
                return Response({"errors": (serializer.errors,)},
                                status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response(request.data, status=status.HTTP_200_OK)


И вот такой тест
class VendorCsvCreateTest(APITestCase):
    def test_vendor_from_csv_create(self):
        url = reverse('csv_vendor_create')
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)


urls.py
urlpatterns = [
    path('csv_upload/', FileUploadView.as_view(), name='csv_upload'),
    path('from_csv_create/', CsvToDatabase.as_view(), name='csv_vendor_create'),
    path('create/', VendorsCreateView.as_view(), name='vendor_create'),]


В классе CsvToDatabase у меня прописано два статуса: 200 в случае успешной загрузки и 400 в случае неудачи. Беру тот же json (data = мой json) который отрабатывает если посылать через Postman и получаю 404. Откуда берется этот статус ? С фронта все работает. Но вот если я вместо data передаю пустой список - то все ок - возвращает 200. Тоесть url получается рабочий.

Лог ошибки
FAIL: test_vendor_from_csv_create (vendors.tests.VendorCsvCreateTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/y700/projects/solution/apps/vendors/tests.py", line 108, in test_vendor_from_csv_create
    self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 404 != 200


По идее если бы data был не корректный я бы 400 получил но никак не 404.

p.s. Склоняюсь к мысли что дела в content_type. У меня data это список словарей data = [{}, {}] а в
response = self.client.post(url, data, format='json')
прописано format=json.
Как указать подходящий тип?
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы