DRF:使用Client()测试POST方法

时间:2020-03-18 10:01:46

标签: django unit-testing django-rest-framework

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

0 个答案:

没有答案