DRF: тестирование метода POST с использованием Client () - PullRequest
0 голосов
/ 18 марта 2020

У меня есть класс, который принимает список словарей - data = [{}, {}]. Если я отправлю данные через Postman, все будет работать, но проблема с тестированием метода класса POST.

Ошибка:

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

views.py

class CsvToDatabase(APIView):

    def post(self, request, format=None):
        r_data = request.data
        for data in r_data:
            if data['nda'] == '':
                data['nda'] = None
                ...
                #some logic
            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)

test.py

class VendorCsvCreateTest(APITestCase):

    #API
    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)

Я предполагаю, что проблема format='json'. Если это так, как я могу передать данные в нужном формате? Если причина в другом, вы можете дать мне решение, пожалуйста! И я вообще не понимаю, почему status = 404, а не 400, если это проблема с данными. Если я сделаю print(url), он вернет реальный URL страницы. Если установлено data = [] пустой список - status=200 возврат.

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'),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...