Django:如何使用APIClient在单元测试用例中上传csv文件

Django:如何使用APIClient在单元测试用例中上传csv文件,django,django-rest-framework,django-unittest,Django,Django Rest Framework,Django Unittest,我想为Django REST框架应用程序上的视图编写一个单元测试。测试应该使用POST上传CSV文件 @staticmethod def _file_upload(client, string, args, file_name): base_path = os.path.dirname(os.path.realpath(__file__)) with open(base_path + file_name, 'rb') as data: data = {

我想为Django REST框架应用程序上的视图编写一个单元测试。测试应该使用POST上传CSV文件

@staticmethod
def _file_upload(client, string, args, file_name):
    base_path = os.path.dirname(os.path.realpath(__file__))
    with open(base_path + file_name, 'rb') as data:
        data = {
                'file': data
            }
        response = client.post(reverse(string, args=[args]), data, format = "multipart")
    return response.status_code, response.data
上面我使用的代码显然不起作用,它显示了以下错误

缺少文件名。请求应包括带有文件名参数的内容处置标头

下面的代码是我想通过单元测试来测试的代码

class ChartOfAccounts(views.APIView):
     parser_classes = (JSONParser, FileUploadParser)
     def post(self, request, pk, *args, **kwargs):
        request.FILES['file'].seek(0)
        csv_data = CSVUtils.format_request_csv(request.FILES['file'])
        try:
            coa_data = CSVUtils.process_chart_of_accounts_csv(company, csv_data)
            serializer = CoASerializer(coa_data, many=True)
            if len(serializer.data) > 0:
                return Utils.dispatch_success(request, serializer.data)

        except Exception as e:
            error = ["%s" % e]
            return Utils.dispatch_failure(request, 'DATA_PARSING_ISSUE', error)

欢迎对此提供任何帮助。提前感谢

我已使用不同的方法修复了我的问题,其中包含HTTP头HTTP\U内容\U处置、HTTP\U内容\U类型引用

这是我的密码

@staticmethod
def _file_upload_csv( string, args, file_name):

    base_path = os.path.dirname(os.path.realpath(__file__))
    data = open(base_path + file_name, 'rb')

    data = SimpleUploadedFile(content = data.read(),name = data.name,content_type='multipart/form-data')

    factory = RequestFactory()
    user = User.objects.get(username=UserConstant.ADMIN_USERNAME)

    view = ChartOfAccounts.as_view()

    content_type = 'multipart/form-data'
    headers= {
        'HTTP_CONTENT_TYPE': content_type,
        'HTTP_CONTENT_DISPOSITION': 'attachment; filename='+file_name}

    request = factory.post(reverse(string, args=[args]),{'file': data},
                           **headers)

    force_authenticate(request, user=user)
    response = view(request, args)

    return response.status_code, response.data
**我成功了


我已经用不同的方法修复了我的问题,HTTP头HTTP\U内容\U配置,HTTP\U内容\U引用类型

这是我的密码

@staticmethod
def _file_upload_csv( string, args, file_name):

    base_path = os.path.dirname(os.path.realpath(__file__))
    data = open(base_path + file_name, 'rb')

    data = SimpleUploadedFile(content = data.read(),name = data.name,content_type='multipart/form-data')

    factory = RequestFactory()
    user = User.objects.get(username=UserConstant.ADMIN_USERNAME)

    view = ChartOfAccounts.as_view()

    content_type = 'multipart/form-data'
    headers= {
        'HTTP_CONTENT_TYPE': content_type,
        'HTTP_CONTENT_DISPOSITION': 'attachment; filename='+file_name}

    request = factory.post(reverse(string, args=[args]),{'file': data},
                           **headers)

    force_authenticate(request, user=user)
    response = view(request, args)

    return response.status_code, response.data
**我成功了


这是一个可能的内存泄漏:data=openbase\u path+file\u name,'rb'您需要调用data.close在末尾关闭文件。这是一个可能的内存泄漏:data=openbase\u path+file\u name,'rb'您需要调用data.close在末尾关闭文件。