javascript - 以 Angular 进行单元测试文件上传

标签 javascript angularjs unit-testing

我正在使用 nf-file-upload 模块将文件上传到我的后端。文件上传的代码如下:

    $scope.upload = function (file) {
            console.log(file)

            Upload.upload({
                url: 'http://localhost:3000/fileupload',
                data: {file: file[0]},
            }).then(function (resp) {
                console.log('Success ' + resp.config.data.file.name + ' uploaded. Response: ' + resp.data);
}

文件上传效果很好。但是,当我创建单元测试时:

  it('should send file to backend for processing', function(){
    var mockFile = {file:[{"name":"file.bin", "size":1018, "type":"application/binary"}]};
    httpBackend.when('POST', 'http://localhost:3000/fileupload').respond(200, {"filePath":"http://localhost:3000/uploads/file.txt"});
    scope.upload(mockFile);
    httpBackend.flush();
  });

我收到错误:

TypeError: undefined is not an object (evaluating 'resp.config.data.file.name')

我做错了什么?

最佳答案

使用 resp 参数的 then 方法。在正常情况下,您将收到一个具有以下结构的对象: { 配置:{ 数据: { 文件:{ name: '一个名字'} } } }

但在您的测试中,您不会以相同的结构进行响应。

编辑: 好的。我懂了。 ng-file-uploader 返回数据的方式是不可模拟的。您不会在 resp.data.config.file.name 中获取文件名,而是在上传文件之前将文件名保存在变量中。 像这样:

   $scope.upload = function (file) {

      var fileName = file.name;

      Upload.upload({
        url: 'http://localhost:3000/fileupload',
        data: {file: file[0]},
      })
      .then(function (resp) {

        console.log('Success ' + fileName + ' uploaded. Response: ' + resp.data);
    });

  };

检查此代码笔 codepen.io/gpincheiraa/pen/MyrvQK 祝你好运!

关于javascript - 以 Angular 进行单元测试文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36486073/

相关文章:

javascript - JSDOM - 文档未定义

javascript - 选择表格单元格作为一个组

javascript - jQuery .attr 只能工作一次

javascript - 使用 .on() 和 namespace 语法附加多个事件处理程序

Javascript - 如何用空格替换字符串中的所有+

css - jstree 没有从 css url 加载 MVC5 中的图标

jquery - 根据 angularjs 中的操作系统更改 CSS

使用 GNU make 跨不同目录进行编译

unit-testing - 我应该在哪里存储grails单元测试使用的示例xml文件?

vb.net - 实现 NHibernate 单元测试以使用 VB.NET/MBUnit 生成模式