我不明白为什么会出现以下错误:


  Chrome 43.0.2357(Windows 7 0.0.0)请求控制器测试
  从xhr请求的结果填充属性失败
          TypeError:无法读取未定义的属性“ 0”
              在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
              在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
              在Scope。$ 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)
              在handleResponse(C:/Users/aazor102115/Desktop/Dev/Balrog/Front/Balrog-UI/bower_components/angular-mocks/angular-mocks.js:1194:9)
              在Function。$ 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];
}


在request.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);函数的第一个ine中添加getLastStatus(statuses)时:

对象数组将像应该的那样显示在浏览器控制台上。

但是未定义会显示在Karma控制台上。所以我不明白是什么原因造成的。

最佳答案

result[i]不能不确定(由于循环检查)。但是看来result[i]["statuses"]是未定义的。您将undefined传递给getLastStatus,然后尝试使其为'0'元素。您应该检查result[i]["statuses"]是否未定义。

关于javascript - 无法读取未定义的属性“0”(仅在单元测试中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34066621/

10-09 21:13