У меня есть следующий метод, связанный с ng-click
по моей scope
с помощью синтаксиса controllerAs
:
vm.setCap = function(cap) {
playersService.setCap(
{playerId: playerId},
{limit: cap}
).$promise.then(function() {
alert('success');
}, function() {
alert('error');
});
};
Все, что я хочу проверить, это то, что когда я вызываю vm.setCap
, playersService.setCap
вызывается один раз с правильными параметрами.
Это то, что я пробовал, но я продолжаю делать ошибку дальше:
it('should call a setCap method', function() {
spyOn(playersService, 'setCap');
expect(PlayersController.setCap).toBeDefined();
PlayersController.setCap(1000);
expect(playersService.setCap).toHaveBeenCalled();
});
ошибка:
TypeError: 'undefined' is not an object (evaluating 'playersService.setCap({playerId:playerId},{limit:cap}).$promise')
В вашем контроллере присоедините playersService
к vm
а затем сделайте это вместо этого:
spyOn(PlayersController.playerService, 'setCap');
Таким образом, ваш контроллер будет выглядеть так:
vm.playersService = playersService;
vm.setCap = function (cap) {
playersService.setCap({
playerId : playerId
}, {
limit : cap
}).$promise.then(function () {
alert('success');
}, function () {
alert('error');
});
};
Тест не знает о вашей переменной playerService, поскольку она является локальной для вашего контроллера, присоединяя ее к vm, вы можете запустить свой тест.