25

以下在我的控制器中:

$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();
});

如何才能做到这一点?

4

1 回答 1

40

默认情况下,当您使用spyOnwith jasmine时,它​​会模拟该函数并且实际上不会在其中执行任何操作。如果您想在其中测试进一步的函数调用,则需要调用.andCallThrough(),如下所示:

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

应该这样做。

于 2013-07-17T17:03:48.097 回答