クロスブラウザのJSのunittest frameworkで非同期のテストをサポートしているモノはほかに何があるのだろう?知っている方がいたら教えてください。
from jQueryのテスティングフレームワーク QUnit
start( ) : テストを再開します。
stop( ) : テストを中断します。Ajaxで非同期通信等のテストを行うとき、非同期処理前にstop()でテストを止め、非同期処理終了時のコールバック関数内で start()を実行して、テストを再開します。
とのこと。これだけではどういう機構なのかさっぱりわからないのでソースを見てみる。
start: function() { // A slight delay, to avoid any current callbacks if ( window.setTimeout ) { window.setTimeout(function() { if ( config.timeout ) { clearTimeout(config.timeout); } config.blocking = false; process(); }, 13); } else { config.blocking = false; process(); } }, stop: function(timeout) { config.blocking = true; if ( timeout && window.setTimeout ) { config.timeout = window.setTimeout(function() { QUnit.ok( false, "Test timed out" ); QUnit.start(); }, timeout); } },
- stopは一時中断で、あまり長く中断しているとテスト失敗にする。通常は非同期な動作を開始する前に呼ぶ。つまり非同期動作が長いということはその非同期動作の制御が戻ってきていないということになる。
- startの13は謎。processを呼ぶとテストが走るのだと思う。
function process() { while ( config.queue.length && !config.blocking ) { config.queue.shift()(); } }
- キューから関数を抜いてそれを実行する。
- config.blockingをたててテストを中断し、フラグをクリアしてprocessを呼べば再開できる。キューから抜かれてしまったモノは中断できないはず、というかブロッキングですね。
0 件のコメント:
コメントを投稿