2016-07-06 4 views
1

Я пытаюсь вызвать событие прокрутки внутри моего модульного теста, используя Mocha, запущенную в браузере. У меня есть следующий код:Событие триггера для модульного тестирования

describe('Background Change', function() { 
    describe('toogleBgHandler()', function() { 
    it('should contain toggle-bg when scrollTop is more than 0', function() { 
    let html = document.createElement('html'); 
    var target = []; 
    target.push(html); 
    let body = document.createElement('body'); 
    let div = document.createElement('div'); 
    html.appendChild(body); 
    body.appendChild(div); 
    document.body.dispatchEvent(new Event("scroll")); 
    toggleBgHandler(target, div) 
    chai.assert.isTrue(div.classList.contains("toggle-bg")); 
    }); 
    }); 
}); 

Функция Я пытаюсь проверить:

function toggleBgHandler(html, ele) { 
     document.addEventListener("scroll", (e) => { 
     if (html[0].scrollTop === 0) { 
      ele.classList.remove("toggle-bg"); 
     } else { 
      ele.classList.add("toggle-bg"); 
     } 
     }); 
    } 

Как вызвать событие прокрутки для функции, зависящей от него? Я также попытался создать объект события, но это тоже не сработало. Любые указатели были бы замечательными.

+0

Этот тест работает внутри браузера, или вы используете что-то вроде 'jsdom'? – Jacob

+0

@Jacob этот тест работает в браузере. Обновлено для уточнения. – freetoplay

+0

Создание события было бы правильным, поэтому было бы хорошо видеть, что вы пытались, чтобы мы могли понять, почему он не работает. – Jacob

ответ

0

Это код прокрутки, который ваш код ищет на окнах или на _element? Если это на окне, вы должны быть в состоянии направить события прокрутки, как это:

window.dispatchEvent(new Event('scroll')); 

Else, вы можете сделать:

element.dispatchEvent(new Event('scroll')); 

Here's a jsfiddle демонстрирующее.

+0

Я только что обновил свой код, который отражает это изменение, но он по-прежнему не работает для меня по какой-то причине. – freetoplay

+0

В своем обновлении вы отправляете событие _before_, когда был добавлен прослушиватель событий. Вы хотите вызвать 'toggleBgHandler', затем отправить событие, а затем утвердить. – Jacob

+0

Я тоже пробовал, но похоже, что событие прокрутки не подхвачено, так как код внутри слушателя никогда не вызывается. – freetoplay

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