2013-07-17 58 views
22

以下是在我的控制器:茉莉花 - 如何監視函數內的函數調用?

$scope.addRangesAndSquare = function() { 
    $scope.addLeftRange(); 
    $scope.addCenterSquare(); 
    $scope.addRightRange(); 
} 

我想窺探$scope.addLeftRange(),這樣當$scope.addRangesAndSquare被稱爲所以是$scope.addLeftRange()

it('expect addLeftRange to be called after calling addRangesAndSquare', function() { 
    spyOn(scope ,'addRangesAndSquare'); 
    spyOn(scope, 'addLeftRange'); 
    scope.addRangesAndSquare(); 
    expect(scope.addLeftRange).toHaveBeenCalled(); 
}); 

如何才能做到這一點?

回答

35

默認情況下,當您使用spyOnjasmine時,它嘲笑該函數並且實際上不執行任何內容。如果你想進一步測試函數中調用,您將需要調用.andCallThrough(),就像這樣:

spyOn($scope, 'addRangesAndSquare').andCallThrough(); 

應該這樣做。

+0

謝謝。另外,我不得不向另外兩個內部函數註釋或添加一個間諜,否則它會拋出一個錯誤。 –

+21

在Jasmine 2中,它已被更改爲'spyOn($ scope,'addRangesAndSquare')..callThrough();' – fracz