2015-07-07 1 views
1

Я пытаюсь высмеять директиву, которая находится в том же модуле своего родителя. Поскольку я хочу изолировать тест только от дочерней директивы, я пытаюсь высмеять родителя. Было бы легко осуществиться, если бы они оба проживали на разных модулях, но поскольку они находятся на одном уровне, я получаю несколько директив с тем же именем. Чтобы обойти, что я пытался поставить что-то вроде этого на моем макете директивы:Angular-Mock переопределяет родительскую директиву и высмеивает ее

 return { 
       priority: 100, 
       terminal:true, 
       restrict:'CE', 
       scope:{ 
        zoom:'@' 
       }, 
       template:'<div ng-transclude></div>', 
       controllerAs:'parentController', 
       controller:mockController, 
       transclude: true 
      }; 

Проблема заключается в том, что в то время как я могу переопределить родительскую директиву Поступая таким образом, директива ребенок никогда не вызывается, поскольку он имеет более низкий приоритет и терминал остановит выполнение.

То, что я ищу, - это способ переопределить определение директивы при тестировании на карма-жасмине и с помощью angular.mock.

ответ

1

Когда вы добавляете директиву, он автоматически создает фабрику и помещает директиву в массив, чтобы несколько директив могли реагировать на одну и ту же разметку.

This person получил способ заставить его работать, создав службу с именем директивы. К сожалению, вероятно, из-за угловых изменений его решение не разрешило это для меня еще, директиву и $$ moduleName, добавив, что на фабрику это разрешено.

Я получил его на поругание, как это:

angular.mock.module('theModuleIWantToTest'); 
    angular.mock.module(function($provide){ 
     $provide.factory('mockParentDirective', function(){ 
       var directive={ 
        priority:0, 
        name:'mockParent', 
        restrict:'CE', 
        scope:{ 
         zoom:'@' 
        }, 
        template:'<div ng-transclude></div>', 
        controllerAs:'mockParentController', 
        controller:mockController, 
        transclude: true, 
        $$moduleName:'theModuleIWantToTest', 
        $$bindings:{} 
       }; 
       return [directive]; 
      } 
     ); 

    }); 

В каком mockParent был ранее объявлен директива, что я хочу, чтобы переопределить.

Я не думаю, что это лучший способ, но пока это единственный способ, которым я нашел переопределение директивы на угловом 1.4.2

Смежные вопросы