2013-10-11 4 views
3

스크롤로 물건을 만드는 위젯을 테스트하려고합니다. 테스트를 위해 Jasmine과 jasmine-jquery를 사용하고 있지만 이상한 결과가 나타납니다.Jasmine-jasmine-jquery spyOnEvent

페이지가 특정 방식으로 스크롤 될 때 내 위젯이 이벤트를 성공적으로 트리거하는지 테스트하고 싶습니다. 문제가 발생하는 위젯 일 경우 여기에서 작업을 단순화했습니다. 그래서 스크롤 이벤트가 창에서 트리거되었는지 테스트하려고합니다.

Testing started at 16:32 ... 
0 
100 
50 
    Expected event scroll to have been triggered on [object Object] 
    ()@C:/Projects/jquery.scrollevents/tests/specs/development.js:45 


'Now scrolling' 
    Expected event scroll to have been triggered on [object Object] 
    Error: Expected event scroll to have been triggered on [object Object] 
     at null.<anonymous> (C:/Projects/jquery.scrollevents/tests/specs/development.js:45:34) 

0 
100 
50'Now scrolling' 
Process finished with exit code 0 

다음 내가 얻을 콘솔에서

it("should trigger scrollEvent on the window", function(){ 
    loadFixtures('lorem-ipsum.html'); //gives some height to the page 
    window.scrollTo(0,0); 
    console.log($(window).scrollTop()); //Should return 0 

    $(window).bind("scroll", function (e) { 
     console.log("Now scrolling"); 
    }); 
    window.scroll(0,100); 
    console.log($(window).scrollTop()); //Should return 100 
    window.scroll(0,50); 
    console.log($(window).scrollTop()); //Should return 50 

    expect('scroll').toHaveBeenTriggeredOn(window); 
}); 

나는 사건의 순서가 홀수로 이것을 만들 모르겠어요. 그것은 두 번 실행됩니까? 스크롤 이벤트는 예상 된 후에 만 ​​트리거됩니까?

브라우저에서 디버깅했습니다. 동일한 문제가 발생할 수 있습니다. 테스트 실패 후 브라우저 이벤트가 트리거됩니다.

Jasmine의 비동기 기능을 살펴 보았지만 기다리는 것이 확실하지 않습니다.

도움을 주시면 감사하겠습니다. 감사합니다

답변

1

따라서 scrollTop 위치가 console에 출력되는 것은 조명기가 재설정 됨으로써 시작된 것 같습니다. 스크롤 이벤트는 window.scroll 함수에 의해 전혀 트리거되지 않았습니다.

$("html, body").scrollTop()에 JQuery 애니메이션을 사용하여 애니메이션을 적용하여 스크롤 이벤트를 트리거 할 수있었습니다.