Jasmine 预期未定义将被定义如何修复它

Jasmine 预期未定义将被定义如何修复它,jasmine,karma-runner,Jasmine,Karma Runner,我试图用Jasmine测试我的角度,但不知何故,我一直得到这个错误,预期未定义的被定义,我已经遵循了我在平均堆栈上的角度文档示例 test.js 描述('测试Ecdreport控制器',函数()){ var$范围,控制器 var-app=angular.module('mean.ecdreport',[]) .controller('EcdreportController',['$scope','$http','Global','Ecdreport',函数($scope,$http,Globa

我试图用Jasmine测试我的角度,但不知何故,我一直得到这个错误,预期未定义的被定义,我已经遵循了我在平均堆栈上的角度文档示例

test.js

描述('测试Ecdreport控制器',函数()){ var$范围,控制器

var-app=angular.module('mean.ecdreport',[])
.controller('EcdreportController',['$scope','$http','Global','Ecdreport',函数($scope,$http,Global,Ecdreport){
$scope.global=全局;
$scope.query=“”;
$scope.package={
名称:“ecdreport”
};
$scope.startDate=null;
$scope.endDate=null;
$scope.currentPage=1;
$scope.child=[];
$scope.maxSize=5;
$scope.items=[];
$scope.itemsPerPage=10;
$scope.totalItems=null;
$scope.direction=1;
$scope.directionOld=1;
$scope.sortatAttributes=0;
$scope.sortAttributesOld=0;
$scope.datamodel=null;
$scope.getDataModel=函数(){
$http({url:'/api/v1/getdatamodel',方法:“GET”})
.成功(功能(数据){
log('Datamodel successful');
$scope.datamodel=数据[0];
console.log('datamodel',data);
})
.错误(函数(错误){
$scope.datamodel=[];
});
}
//log(“尝试获取数据模型”);
$scope.getDataModel();
});
描述('测试Ecdreport控制器',函数()){
var$范围,控制器;
每个之前(模块('mean.ecdreport',函数($controllerProvider){
$controllerProvider.register('EcdreportController',function(){
});
}));
beforeach(注入(函数($rootScope,$controller){
$scope=\$rootScope\$new();
控制器=$controller('EcdreportController',
{$scope:$scope
});
}));
它('应该注册',函数(){
expect(controller.toBeDefined();
})
it('测试范围',功能()){
expect($scope).toBeDefined()
expect($Scope.getDataModel).toBeDefined();
})
});                                 

由于测试中的控制器从未定义,所以出现该错误。您需要使用
var-controller=…

您应该像这样使用控制器注入:

beforeEach(inject(function(_$rootScope_,_$controller_){
    $scope = _$rootScope_.$new();
    createController = function() {
        return _$controller_('EcdreportController', {
           $scope : $scope
        });
    };
}));
并在每次测试中初始化控制器,如下所示:

it('Should be registered', function(){
    var controller = new createController();
    expect(controller).toBeDefined();
})

通过这种方式,如果您的控制器需要将任何数据传递到,您也可以在每次测试中传递不同的参数。

感谢Tom Shen,当我定义控制器时,控制器确实通过了,但控制器内部的所有故障仍然会给我相同的错误(预期未定义)就像试图定义$scope.getDataModel一样。即使我初始化了控制器('should be register',function(){expecte($scope.getDataModel()).tobededefine()})