2016-12-20 12 views
0

페이지의 특정 지점으로 스크롤 한 다음 페이지에 대한 것들을 주장 할 수 있도록 emberJs 수락 테스트가 필요합니다. 본체 scrollTop 위치 I은 1000Ember 수락 테스트 andThen() 스크롤 이벤트가 완료 될 때까지 기다리지 않습니다.

에있을 필요 108에있을 것이라는

andThen(()=>{ 
    console.log('body', Ember.$('body').scrollTop()); 
}) 

인쇄하여 다음

이들 기능 모두

,

Ember.$('body').scrollTop(1000); 

window.scroll(0,1000); 

body scrollTop이 1000 인 순간까지 얻을 수있는 유일한 방법은 지금까지이 콜백을 사용할 때입니다.

Ember.$('body').animate({scrollTop: 1000},() => { 
    console.log('body', Ember.$('body').scrollTop()); 
    staticWiz.assertHasGoToTopButton(true); 
}); 

여기서 문제는이 콜백이 발생하는 지점까지 테스트 물건이 없다는 것입니다. 나는 아무 것도 주장 할 수 없다.

나는이 콜백 assert.async()과 수행()를 사용하려고하면, 그것은 몸 scrollTop()가 (108)에있을 때 조기에 발생한다 :

const done = assert.async(); 
Ember.$('body').animate({scrollTop: 1000},() => { 
    console.log('body', Ember.$('body').scrollTop()); 
    staticWiz.assertHasGoToTopButton(true); 
    done(); 
}); 

나는 반복 제한 시간을 설정하는 경우 스크롤 위치를 확인하는 방법으로, 그것은 단지 108의 동일한 위치에 영원히 머물러 있습니다.

const done = assert.async(); 
window.scroll(0, 1000); 
const checkScroll =() => { 
    console.log('body', Ember.$('body').scrollTop()); 
    if (Ember.$('body').scrollTop() === 1000) { 
    staticWiz.assertHasGoToTopButton(true); 
    done(); 
    return; 
    } 
    setTimeout(checkScroll, 1000); 
}; 
checkScroll(); 

그래서. 어떤 아이디어? 아무도 스크롤을 할 수 없지만 Emberjs 수락 테스트에서 특정 번호가 필요한 경우에 이전에이 작업을 수행 한 사람이 있습니까?

업데이트 : Coworker는 테스트 페이지의 본문이 테스트 페이지의 중첩 된 앱 본문 대신 테스트에 의해 스크롤된다는 것을 깨달았습니다. 앱의 '본문'스크롤 워처는 테스트 페이지의 앱 창 내부에서 스크롤을 선택하지 않습니다. 거기에서 어디로 가야할지 모르겠다.

답변

4

이 작업을 수행하는 한 가지 방법은 Ember에서 낮은 수준 waiter 기능을 사용하는 것입니다.

참조 :

function finishedScrolling() { 
    return Ember.$('body').scrollTop() === 1000; 
} 

Ember.Test.registerWaiter(finishedScrolling); 

Ember.$('body').animate({scrollTop: 1000}); 

andThen(function() { 
    Ember.Test.unregisterWaiter(finishedScrolling); 
    staticWiz.assertHasGoToTopButton(true); 
}); 

여기서 일을 참조하십시오 : https://ember-twiddle.com/1407bbadbb13365181f91201de6ba46c?openFiles=tests.acceptance.my-acceptance-test.js%2C

http://emberjs.com/api/classes/Ember.Test.html#method_registerWaiter 여기

당신이 그것을 사용하는 것이 방법 기본적입니다