我正在尝试测试我的Angular控制器中是否调用了某个特定函数。
.controller('demo',function(){
function init(){
//some code..
}
init();
}
我的测试代码如下所示:
describe(..
beforeEach(...
function createController() { /*call this fn to create controller */
)
describe('controller initilization'.function(){
var spy = spyOn(this,init)
createController();
expect(spy).toHaveBeenCalled();
}
)
当然,上述单元测试失败了。那么我如何检查函数init()是否被调用?
答案 0 :(得分:1)
你写的代码不是“间谍”。 所以要么不要监视init,要么只模仿控制器协作者。
你在Java中编写了一个私有方法的等价物。使其公开或使该方法属于协作者。
将init移动到服务中,如果需要,将$ scope作为参数传递。
module.service('Init',function(){
this.init=function($scope){};
})
.controller('Ctrl',function($scope,Init){
Init.init($scope);
})
然后
$scope=$rootScope.new();
Init=$injector.get('Init');
spyOn(Init,'init');
Ctrl=$controller('Ctrl',{$scope:$scope});
expect(Init.init).toHaveBeenCalledWith($scope);