2014-06-19 38 views
1

我想测试一下是否在我的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(); 
    } 

) 

ofcourse上面的单元测试失败。那么我将如何检查函数init()是否被调用?

+0

? –

+0

所以我应该把它定义为scope.init – runtimeZero

+0

不应该有'$ scope'测试时,除非你正在写E2E测试... –

回答

1

你写的代码不是“可窥探的”。 因此,不要在init上监视或者只模拟控制器协作者。

你写在Java.So私有方法相当于把它公开或使该方法属于合作者。

举动初始化成一个服务,如果需要的话通过$范围作为参数。

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); 
你不能,你需要做初始化函数公众因此可以测试
相关问题