无法阅读财产' 0'未定义的(仅在单元测试中)

时间:2015-12-03 12:53:51

标签: javascript angularjs unit-testing karma-jasmine

我不明白为什么我会收到以下错误:

  

Chrome 43.0.2357(Windows 7 0.0.0)请求控制器测试   从xhr请求失败的结果填充属性FAILED           TypeError:无法读取属性' 0'未定义的               at getLastStatus(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/app/tools.js:68:43)               在C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/app/requests/requests.js:238:42               at processQueue(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:14792:28)               在C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:14808:27               在范围。$ eval(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:16052:28)               在Scope。$ digest(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:15870:31)               在Scope。$ apply(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:16160:24)               完成后(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular/angular.js:10589:47)               at handleResponse(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular-mocks/angular-mocks.js:1194:9)               在函数。$ httpBackend.flush(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular-mocks/angular-mocks.js:1553:26)

此错误仅在业力日志中显示。

但由于循环条件,它不应该是未定义的。

在tools.js文件中:

function getLastStatus(statuses) {
  var lastStatusDate = Date.parse(statuses[0].date); // this is the line pointed in the error
  var lastIndex = 0;

  for (var i = 0; statuses[i]; i++) {
    var currentStatusDate = Date.parse(statuses[i].date);

    if (currentStatusDate > lastStatusDate) {
      lastStatusDate = currentStatusDate;
      lastIndex = i;
    }
  }
  return statuses[lastIndex];
}

在requests.js文件中:

Requests.query().$promise.then(function(result) {
      controllerScope.requestsList = [];
      for (var i = 0; result[i]; i++) {
        var currentRequest = {
          id: result[i]["id"],
          projectTitle: result[i]["project"].title,
          status: getLastStatus(result[i]["statuses"]).status, // this is the line pointed in the error
          description: result[i]["description"],
          regions: regionsIdToName(controllerScope.regionsList, result[i]["project"].regions),
          requestDate: moment(result[i]["request_date"]).format("MM-DD-YYYY"),
          developers: result[i]["developers"],
          statusDate: moment(getLastStatus(result[i]["statuses"]).date).format("MM-DD-YYYY")
        };
        controllerScope.requestsList.push(currentRequest);
      }
    });

编辑:在console.log(statuses);函数的第一个符号处添加getLastStatus(statuses)时:

在浏览器控制台上显示一个对象数组,就像它应该的那样。

但是在Karma控制台上显示未定义。所以我得不到导致它的原因。

2 个答案:

答案 0 :(得分:1)

result[i]无法定义(由于循环检查)。但似乎result[i]["statuses"]未定义。您将undefined传递给getLastStatus,然后尝试获取它的'0'元素。您应该检查result[i]["statuses"]是否未定义。

答案 1 :(得分:0)

好的,问题来自测试文件。传递给respond $httpBackend方法的预期响应缺少某些属性。