0

Установка

Здесь я создаю, компилирую, связывая и добавляя элемент, а затем настраивая шпион событий.Как использовать шпионы событий на угловом элементе в dom?

describe('Click Confirm', function() { 
    var eventSpy, element, scope; 

    beforeEach(module('app')); 

    beforeEach(inject(function ($location, $rootScope, $compile) { 
     var el, linkFn; 

     scope = $rootScope.$new(); 
     el = angular.element('<a id="testClickConfirm" href="" ng-click="deleteFn()" click-confirm="Test confirmation message">Delete</a>'); 

     // The $compile method returns the directive's link function 
     linkFn = $compile(el); 

     // The link function returns the resulting DOM object 
     element = linkFn(scope); 

     $('body').append(element); 

     eventSpy = spyOnEvent('#testClickConfirm', 'click'); 
    }); 

Первоначальные испытания

Они проходят и убедитесь, что элемент существует, в DOM и виден.

it('should have set up correctly', function() { 
     expect(element).toExist(); 
     expect(element).toBeInDOM(); 
     expect(element).toBeVisible(); 

     expect(el).toExist(); 
     expect(el).toBeInDOM(); 
     expect(el).toBeVisible(); 

     expect($('#testClickConfirm')).toExist(); 
     expect($('#testClickConfirm')).toBeInDOM(); 
     expect($('#testClickConfirm')).toBeVisible(); 
    }); 

Event Spy Тесты

it('should have set up correctly', function() { 
     element.click(); 
     expect(eventSpy).toHaveBeenTriggered(); // <- FAILS 
     expect('click').toHaveBeenTriggeredOn('#testClickConfirm'); // <- FAILS 
    }); 

}); 

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

Дополнительная информация

У меня есть element.bind('click', ..., установленный в директиве я тестирование, и я добавил console.log внутри него, что пожары, когда я имитировать событие щелчка.

ответ

0

e.stopImmediatePropagation();

И, конечно же, я сразу осознаю преступника.

Итак, неудивительно, что jasmine-jquery не будет принимать события, чей обработчик вызывает e.stopImmediatePropagation().

Jasmine-jquery действительно предоставляет метод .toHaveBeenStopped(), но поскольку я использую stopImmediatePropagation(), похоже, что шпион также задыхается.

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