AngularJS+;因果报应+;Jasmine-测试私有函数
我正在尝试测试一个函数,它是一个私有函数,并且它在我的控制器中的其他函数中被调用。当我尝试测试这个validateParameterGroup函数时,它给出了一个错误,表明validateParameterGroup没有定义 控制器AngularJS+;因果报应+;Jasmine-测试私有函数,angularjs,jasmine,karma-runner,Angularjs,Jasmine,Karma Runner,我正在尝试测试一个函数,它是一个私有函数,并且它在我的控制器中的其他函数中被调用。当我尝试测试这个validateParameterGroup函数时,它给出了一个错误,表明validateParameterGroup没有定义 控制器 angular.module('PpmApp') .controller('parameterGroupListController', ['$scope', '$injector', 'parameterGroups', parameterGroupListCon
angular.module('PpmApp')
.controller('parameterGroupListController', ['$scope', '$injector', 'parameterGroups', parameterGroupListController]);
function parameterGroupListController($scope, $injector, parameterGroups) {
$scope.createParameterGroup = function (parameterGroup) {
var validationErrors = validateParameterGroup(parameterGroup);
}
function validateParameterGroup(parameterGroup) {
// ...
}
};
测试用例
describe('validateParameterGroup', function () {
beforeEach(function () {
var parameterGroup = {};
});
it('should validate a parameter group', function () {
expect(validateParameterGroup(parameterGroup)).toEqual(false);
});
});
================编辑==================
如果无法测试私有函数,我可以测试$scope.createParameterGroup吗?我试图这样做,但我得到以下错误
TypeError:$scope.createParameterGroup(…)不是函数
测试
describe('createParameterGroup', function() {
var validationErrors, parameterGroup;
beforeEach(function() {
validationErrors = {};
validationErrors.isError;
parameterGroup = {
GroupName: "ABC",
Description: "ABC",
fromMonth: 1,
fromYear: 18,
toMonth: 12,
toYear: 18
}
});
it('should create a parameter group', function() {
expect($scope.createParameterGroup(parameterGroup)(validationErrors.isError)).toEqual(false);
});
});
是的,
validateParameterGroup
变得完全私有,无法从外部访问。您可以扩展$scope
对象以包含此函数,使其成为公共函数,类似于createParameterGroup
angular.module('PpmApp')
.controller('parameterGroupListController', ['$scope', '$injector', 'parameterGroups', parameterGroupListController]);
function parameterGroupListController($scope, $injector, parameterGroups) {
$scope.createParameterGroup = function (parameterGroup) {
var validationErrors = validateParameterGroup(parameterGroup);
}
$scope.validateParameterGroup = function(parameterGroup) {
// ...
}
};
是的,
validateParameterGroup
变得完全私有,无法从外部访问。您可以扩展$scope
对象以包含此函数,使其成为公共函数,类似于createParameterGroup
angular.module('PpmApp')
.controller('parameterGroupListController', ['$scope', '$injector', 'parameterGroups', parameterGroupListController]);
function parameterGroupListController($scope, $injector, parameterGroups) {
$scope.createParameterGroup = function (parameterGroup) {
var validationErrors = validateParameterGroup(parameterGroup);
}
$scope.validateParameterGroup = function(parameterGroup) {
// ...
}
};
你能给我看一下整个控制器吗?@zooly我已经更新了代码,请看一下这就是我的想法!请参阅VadimB答案,您的函数未链接到
$scope
,它是私有的,因此Karma无法访问。但将函数公开似乎不是一个解决方案。有其他选择吗?老实说,我不知道,也许可以把它绑定到这个
。你不能做$scope.validateParameterGroup(…)
?你能显示entiere控制器吗?@zooly我已经更新了代码,请看一下这就是我的想法!请参阅VadimB答案,您的函数未链接到$scope
,它是私有的,因此Karma无法访问。但将函数公开似乎不是一个解决方案。有其他选择吗?老实说,我不知道,也许可以把它绑定到这个
。您不能执行$scope.validateParameterGroup(…)
?有其他选择吗?由于我不习惯将validateParameterGroup函数设置为公共函数。您需要将smth设置为公共函数,因此可以将validateParameterGroup
与validate
之类的函数包装在一起,并将其设置为公共函数。像scope.validate=function(params){return validateParameterGroup(params)}
然后模拟整体validate
如果我测试$scope.createparameterGroup函数并通过这样做将自动测试我的validateParameterGroup函数,我已经发布了上述问题的解决方案。还有别的选择吗?由于我不习惯将validateParameterGroup函数设置为公共函数。您需要将smth设置为公共函数,因此可以将validateParameterGroup
与validate
之类的函数包装在一起,并将其设置为公共函数。像scope.validate=function(params){return validateParameterGroup(params)}
然后模拟整体validate
如果我测试$scope.createparameterGroup函数并通过这样做将自动测试我的validateParameterGroup函数,我已经发布了上述问题的解决方案。