2015-05-07 40 views
0

我有一個方法定義在控制器上,我試圖測試它是否被調用。我能夠測試該方法是否已定義,但是當我嘗試並測試它是否已被調用時,它會抱怨它預計該間諜已被調用。茉莉花不報告角度控制器功能已被稱爲

這裏是我的控制器:

myControllers.controller 'MyCtrl', ($scope) -> 
    this.init =() -> doStuff() 
    this.init() 

這裏是我的測試套件:

describe "testing myCtrl",() -> 
    beforeEach "myControllers" 
    $controller = {} 
    $scope = {} 

    beforeEach inject (_$controller_,$rootScope) -> 
    $controller = _$controller_ 
    $scope = $rootScope.$new() 

    describe "MyCtrl",() -> 
    beforeEach() -> 
     MyCtrl=$controller('MyCtrl',{$scope:$scope}) 

    it "should be defined",() -> # passes 
     expect(MyCtrl).toBeDefined() 

    it "should define #init",() -> # passes 
     expect(angular.isFunction(MyCtrl.init)).toBe true 

    it "should call #init",() -> # fails 
     spyOn MyCtrl, 'init' 
     expect(MyCtrl.init).toHaveBeenCalled() 

錯誤的最後斷言結果:預計間諜init進程已被調用。

回答

0

這是因爲它馬上被調用,所以當你的測試命中時,它已經運行。您之前創建MyCtrl的beforeEach是它自動調用的地方。你必須以不同的方式來組織測試。

+0

我應該如何構造它?我應該在斷言中實例化控制器還是在beforeEach中創建間諜? –

0

我相信問題的答案是在我的控制器中沒有init()函數。沒有理由。控制器中的頂級代碼在實例化時運行,將其封裝在init函數中是多餘的。