2016-06-13 3 views
0
функция

Моя директива Ссылка приведена ниже -Жасмин не работает для директивы ссылку на документ нажмите

link:function(scope,elem,attr){ 
      $(document).on("click",function(event){ 
       var target = $(event.target); 
       if(target.is('.detailBox') || target.closest('.detailBox').length){ 
        return; 
       } 
       scope.$emit('closeDetailBox'); 
       scope.$apply(); 
      }); 
     } 

И мой жасмин TC для тестирования Emit приводится ниже -

it('Some other box click', function() { 
      spyOn($rootScope, '$emit'); 
      var theboxelement = '<button class="thebox"></button>'; 
      var thebox = $(theboxelement); 
      $('body').append(thebox); 
      var spyEvent = spyOnEvent('.thebox', 'click'); 

      thebox.trigger("click"); 
      expect($rootScope.$emit).toHaveBeenCalledWith('closeDetailBox',theboxelement); 
      thebox.remove(); 
     }); 

Испустите событие должно были вызваны и пойманы, но это никогда не срабатывало. Я получаю сообщение об ошибке: «Ожидаемый spy $ emit был вызван с ['closeDetailBox', ''], но он никогда не вызывался».

Я занимаюсь этой проблемой с 2-х дней, не смог получить исправление, помощь PLS!

ответ

2

В соответствии с вашим кодом, я думаю, вам нужно вызвать функцию связи. Затем сделайте все остальное. Что-то вроде mydirective.link(); Это позволит устранить следующие вызовы функций.

Вы можете, вероятно, проверить следующие пункты, если выше не работает -

Смотрите, если ваши зависимости модуля правильно разрешения.

Использовать локальную отладку жасмина. Вероятно, это самый простой способ проверить ваш поток.

+0

Спасибо вам большое! Вызов функции связи был всем, что требовалось. Теперь это работает как шарм. Спасибо. –

+0

@anandpatil вы можете показать, как вы активировали функцию ссылки? Вы передавали параметры области, элемента, attrs? –

+0

Мне просто пришлось использовать директиву.link() без каких-либо параметров, так как я не требовал их в своей функции. Но если они вам нужны, вам нужно их передать. –

0

Основываясь на вашей директиве, ваше мероприятие исходит из сферы действия вашей директивы. Вы уверены, что это вызовет функцию $ emit от $ rootScope?

Возможно, вам нужно использовать $ broadcast на $ rootScope?

+0

Я отлаживал и видел, после запуска по коду жасмина, он не вводит код ссылки в директиве. Не знаю, почему! –

+0

Связано ли $ jQuery с вашей директивой? – Paqman

+0

Да, это связано с jQuery –

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