Я пытаюсь проверить вызовы функций из функции инициализации моего контроллера. Я маршрутизирую различную логику на основе stateParams и хочу написать модульные тесты для этих сценариев, но у меня возникают проблемы с ее работой.
Моя функция инициализации
var _init = function () {
// Get full companyList
servicecall().then(function (response) {
if ($stateParams.ID) {
$scope.callOne();
}
else if ($stateParams.Index == -1) {
$scope.callTwo();
}
else if ($stateParams.Index == '' || $stateParams.Index == null) {
$scope.callThree();
}
else
$scope.callFour();
},
function (err) {
console.log(err);
});
};
_init();
Итак, я просто хочу установить $stateParams.Index = -1 и убедиться, что вызывается callTwo().
Мой beforeEach выглядит
beforeEach(function () {
controller = $controller('Controller', {
$scope: $scope,
$stateParams: $stateParams,
$state: $state
});
// And add $scope's spyOns
spyOn($scope, 'callOne').and.callThrough();
spyOn($scope, 'callTwo').and.callThrough();
spyOn($scope, 'callThree').and.callThrough();
spyOn($scope, 'callFour').and.callThrough();
});
Сначала я попробовал следующее, что, конечно, не сработало; там написано, что шпиона не вызывали.
it("should call callTwo if stateParams.index is -1", function () {
$stateParams.Index = -1;
expect($scope.callTwo()).toHaveBeenCalled();
});
Я полагал, что вся инициализация происходила до того, как мой шпион присоединился, поэтому я попытался переместить этот материал внутрь моего вызова it, но все сломалось.
Этот говорит, что за callTwo уже шпионили.
it("should call callTwo if stateParams is -1", function () {
$stateParams.Index = -1;
spyOn($scope, 'callTwo').and.callThrough();
controller = $controller('Controller', {
$scope: $scope,
$stateParams: $stateParams,
$state: $state
});
expect($scope.callTwo).toHaveBeenCalled();
});
Но если я перемещаю объявление шпиона после инициализации контроллера, он говорит, что он больше не вызывается
- Как я могу гарантировать, что вызовы выполняются должным образом во время создания экземпляра контроллера?