мокаем сервис $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/ - примерчик.