golovewkin
@golovewkin
WEB - Разработчик

Как написать тест для директивы Angular?

Всем привет.
Пробую писать тесты Karma + Jasmine. Полное понимание еще не пришло.
Подскажите пазязя, как написать тест для директивы
taskApp.directive('backButton', function ($location) {
    return {
        restrict: 'A',
        link: function (scope, element) {
            element.on('click', function () {
                $location.path('/');
		scope.$apply();
            });
        }
    };
});


Или хотя бы в каком направлении копать.
Спасибо
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
мокаем сервис $location, и трекаем что наш код вызовет метод path с нужными нам аргументами. Создаем инстанс директивы (сервисом $compile) и кликаем на элемент. Проверяем был ли вызван метод.

Но этот тест можно существенно упростить. У нас уже есть покрытая тестами директива ngClick, потому можно сделать так:

function HomeButtonController($location) {
         var vm = this;
     vm.goHome = function () {
          $location.path('/');
     }
}

function homeButtonDirective() {
    restrict: 'E',
    controller: HomeButtonController,
    controllerAs: 'vm',
    transclude: true,
    template: '<button ng-click="vm.goHome()" ng-transclude></button>'
}


в этом случае мы можем только проверить биндинг (что есть такой метод у контроллера) в рамках статического тестирования (код ревью считай), а логику - можно просто дергать контроллеры. В этом есть очень важное преимущество, так как вопервых мы отвязываем логику приложения от DOM и это позволяет гонять наши тесты просто в консольке без браузера, а случаи с взаимодействием с DOM можно покрыть E2E тестами.

https://github.com/AngularClass/NG6-todomvc-starter/ - примерчик.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы