web-dev-qa-db-fra.com

Jasmine - Comment espionner un appel de fonction au sein d'une fonction?

Ce qui suit est dans mon contrôleur:

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

Et je veux espionner $scope.addLeftRange(), de sorte que lorsque $scope.addRangesAndSquare Est appelé, $scope.addLeftRange() soit:

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

Comment cela peut-il être fait?

23
criver.to

Par défaut, lorsque vous utilisez spyOn avec jasmine, il se moque de cette fonction et n'exécute rien en fait. Si vous souhaitez tester d'autres appels de fonction à l'intérieur, vous devrez appeler .andCallThrough(), comme ceci:

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

ça devrait le faire.

35
UnicodeSnowman