Angularjs 在控制器内测试命名函数
菜鸟Jasmine/棱角分明的问题 我在控制器中有一个命名函数,如下所示:Angularjs 在控制器内测试命名函数,angularjs,jasmine,Angularjs,Jasmine,菜鸟Jasmine/棱角分明的问题 我在控制器中有一个命名函数,如下所示: .controller( 'DummyCtrl', function DummyCtrl($scope){ var doSomething = function() { return "blah"; }; }) 我需要测试此函数,并尝试通过调用以下Jasmine规范: describe ('myApp', function(){ var $scope, $controller; var
.controller( 'DummyCtrl', function DummyCtrl($scope){
var doSomething = function() {
return "blah";
};
})
我需要测试此函数,并尝试通过调用以下Jasmine规范:
describe ('myApp', function(){
var $scope, $controller;
var DummyCtrl;
beforeEach(module('myApp'));
describe('controllers', function(){
beforeEach(inject(function ($controller, $rootScope){
$scope = $rootScope.$new();
DummyCtrl = $controller('DummyCtrl', {$scope: $scope});
}));
describe( 'DummyCtrl', function(){
var blah;
beforeEach(function(){
blah = DummyCtrl.doSomething();
});
it('should do something', function(){
expect(blah).toContain("blah");
});
});
});
});
我没有解决问题,而是导致了以下错误:
TypeError:Object没有方法“doSomething”
。我假设这是一件我不理解的超级简单的事情 从某种意义上说,使用这样的函数是私有的,不能从函数外部访问。请查看此链接:
本质上说,如果在javascript中有一个函数/对象,任何带有this.
前缀的东西都是公共的,任何带有var
前缀的东西都是私有的
对于Angular,如果不仅仅是为了减少$scope
变量的内存使用量,您肯定可以使用私有变量和函数。您的$scope
对象应该调用私有函数,以获取用户要显示/使用的值。尝试将其更改为:
.controller( 'DummyCtrl', function DummyCtrl($scope){
var doSomething = function() {
return "blah";
};
$scope.something=doSomething();
})
然后使用以下工具测试专用功能:
describe( 'DummyCtrl', function(){
var scope = {},
ctrl = new DummyCtrl(scope);
it('should do something', function(){
expect(scope.something).toMatch('blah');
});
});
Angular将使用为控制器注册提供的
函数DummyCtrl
。如果需要控制器实例公开函数doSomething
,而不将其附加到$scope
,则应将其附加到此
试着改变
var something = function(...
到
而且你的测试应该有效
您可以在此处看到此方法:。还可以看看这个问题:这就成功了。我希望能够调用这些私有函数来简化一些单元测试(在调用这些方法的$scope函数上)。但我相信我可以找到一种方法,使用他们的名字。这应该被标记为答案。另一个没有完全解决这个问题。
this.something = function(...