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')); 

, 당신은 할 수 있습니다 :

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

Here's a jsfiddle 시연.

+0

방금 ​​변경 사항을 반영하는 코드를 업데이트했지만 아직 어떤 이유로 든 나를 위해 작동하지 않습니다. – freetoplay

+0

업데이트에서 이벤트 리스너가 추가되기 전에 _ 이벤트가 발생했습니다. 'toggleBgHandler'를 호출 한 다음 이벤트를 전달한 다음 어설 션하려고합니다. – Jacob

+0

나는 그것을 시도해 봤지만, 리스너 내부의 코드가 결코 호출되지 않기 때문에 스크롤 이벤트가 선택되지 않는 것처럼 보입니다. – freetoplay

관련 문제