首页 > 解决方案 > DRF:使用 Client() 测试 POST 方法

问题描述

我有一个接受字典列表的类 - 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

视图.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)

测试.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 = 404400如果是数据问题,我也不明白。如果我这样做print(url),它会返回一个真实的页面 url。如果设置为data = []空列表 -status=200返回。

网址.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'),]

标签: djangounit-testingdjango-rest-framework

解决方案


推荐阅读