жасмин jquery - шпионить за событием с атрибутом данных

У меня возникли проблемы с поиском правильного способа использования jasmine-jquery для тестирования, правильно ли запускается следующее событие

$(document).on('click', '[data-test]', function(e) {
    ...
});

в основном я хочу написать 2 теста, которые должны выглядеть примерно так (все части ????? - это те, которые для меня загадка):

spyOnEvent(?????????????, 'click');
var fixture = setFixtures('<a data-test="whatever"></a> <a class="dummy"></a>');
var $elem = fixture.find('a[data-test="whatever"]');
var $dummy = fixture.find('.dummy');

it('should be triggered', function() {
    $elem.click();
    expect('click').toHaveBeenTriggeredOn(?????);
});

it('should not be triggered', function() {
    $dummy.click();
    expect('click').not.toHaveBeenTriggeredOn(?????);
});

Надеюсь, что кто-то там может помочь мне с этим =) ура


person macg    schedule 18.09.2013    source источник


Ответы (1)


Проблема в том, что toHaveBeenTriggeredOn будет истинным в обоих случаях, потому что вы инициируете щелчок в своем тесте. Кроме того, это не то, что вы хотите проверить. Вы должны проверить, что обработчик щелчка был запущен. Обычно это делается путем проверки результата функции обработчика кликов. Например, что класс изменился.

$(document).on('click', '[data-test]', function(e) {
   $(this).addClass('test')
});

var fixture = setFixtures('<a data-test="whatever"></a> <a class="dummy"></a>');
var $elem = fixture.find('a[data-test="whatever"]');
var $dummy = fixture.find('.dummy');

it('should be triggered', function() {
    $elem.click();
    expect($elem.hasClass()). toBeTruthy();
});

it('should not be triggered', function() {
    $dummy.click();
    expect(dummy.hasClass()).toBeFalsy();
});
person Andreas Köberle    schedule 19.09.2013
comment
Dankeschön =) В основном так я реализовал это после того, как отказался от попыток поймать триггеры, и это полностью удовлетворительно. Большое спасибо, что нашли время, приятель, ура - person macg; 19.09.2013