2016-12-20 10 views
0

ページ内の特定のポイントまでスクロールして、そのページについてのみアサートできるようにするにはemberJs受け入れテストが必要です。Ember受け入れテストandThen()は、スクロールイベントが完了するまで待つことはありません

これらの機能の両方、

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

window.scroll(0,1000); 

体scrollTopスプライトの位置が108であること

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

プリントアウト続いてそれは1000

であることが必要body scrollTopが1000である瞬間までに私が得ることができる唯一の方法は、これまでこのコールバックを使用することです。

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

ここで問題となるのは、このコールバックが発生する時点ではテスト対象が存在しないことです。私は何も断言できない。

私はこのコールバックをassert.async()およびdone()を使用しようとすると、それは身体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(); 

So.何か案は? Emberjsの受け入れテストで特定の番号を必要とするだけでスクロールすることはできません。

更新:Coworkerは、テストページ内のネストされたアプリケーション本体の代わりに、テストページの本文がテストによってスクロールされていることを認識しました。私たちのアプリの 'body'スクロールウォッチャーは、テストページのアプリウィンドウ内のスクロールを受け取りません。そこからどこへ行くかわからない。

答えて

4

この作業を行う1つの方法は、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ここ

は、あなたがそれを使用する方法、基本的です

関連する問題