2014-06-19 83 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); 
你不能,你需要做初始化函數公衆因此可以測試
相關問題