Jasmine - How to spy on a function call within a function?

32,944

By default, when you use spyOn with jasmine, it mocks that function and doesn't actually execute anything within it. If you want to test further function calls within, you'll need to call .andCallThrough(), like so:

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

that should do it.

Share:
32,944

Related videos on Youtube

criver.to
Author by

criver.to

Updated on July 09, 2022

Comments

  • criver.to
    criver.to almost 2 years

    The following is in my controller:

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

    And I want to spy on $scope.addLeftRange(), so that when $scope.addRangesAndSquare is called so is $scope.addLeftRange():

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

    How can this be done?

  • criver.to
    criver.to almost 11 years
    Thanks. Also, I had to comment out or add a spy to the other two inner functions, otherwise it will throw out an error.
  • fracz
    fracz over 9 years
    In Jasmine 2, it has been changed to spyOn($scope, 'addRangesAndSquare').and.callThrough();