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

Моя функция директивной ссылки приведена ниже -

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 для тестирования излучения приведен ниже -

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();
        });

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

Я занимаюсь этой проблемой уже 2 дня, не могу исправить, пожалуйста, помогите!


person anand patil    schedule 13.06.2016    source источник


Ответы (2)


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

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

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

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

person bijoy tv    schedule 16.06.2016
comment
Огромное спасибо! Все, что требовалось - это вызвать функцию ссылки. Теперь это работает как шарм. Спасибо. - person anand patil; 16.06.2016
comment
@anandpatil вы можете показать, как вы вызывали функцию ссылки? Вы передали параметры scope, element, attrs? - person el vis; 20.06.2016
comment
Мне просто пришлось использовать directive.link () без каких-либо параметров, поскольку они мне не требовались в моей функции. Но если они вам нужны, вы должны их пройти. - person anand patil; 22.06.2016

На основе вашей директивы ваше событие генерируется из области действия вашей директивы. Вы уверены, что это вызовет срабатывание функции $ emit объекта $ rootScope?

Может быть, вам стоит использовать $ broadcast в $ rootScope?

person Paqman    schedule 13.06.2016
comment
Я отладил и увидел, что после триггера по коду жасмина он не вводит код ссылки в директиве. Понятия не имею, почему! - person anand patil; 13.06.2016
comment
Связан ли $ с jQuery в вашей директиве? - person Paqman; 13.06.2016
comment
Да, это связано с jQuery - person anand patil; 13.06.2016
comment
Основная проблема, с которой я столкнулся, заключается в том, что функция триггера на жасмине вообще не попадает внутрь директивы. Что-то мне не хватает. - person anand patil; 13.06.2016
comment
Тогда не стоит смешивать jquery и angularjs. Проверьте эту ссылку stackoverflow.com/questions/14994391/ и особенно глава 5. о директивах и jQuery. Это должно объяснить все и позволить вам переписать вашу директиву без использования jQuery. - person Paqman; 13.06.2016