Как бы я протестировал этот метод ng-click?

0

У меня есть следующий метод, связанный с 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')
  • 0
    Разместите весь свой тестовый код, пожалуйста.
Теги:
unit-testing
jasmine
karma-runner

1 ответ

0

В вашем контроллере присоедините 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, вы можете запустить свой тест.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню