以下は、 Jon Resig 著の『 Secrets of JavaScript Ninja』という本の中央タイマー コントロールを使用して非同期テストを実行するテスト スイートを実装する方法の実装です。
(function() {
var queue = [], paused = false; //#1
this.test = function(fn) { //#2
queue.push(fn);
runTest();
};
this.pause = function() { //#3
paused = true;
};
this.resume = function() { //#4
paused = false;
setTimeout(runTest, 1);
};
function runTest() { //#5
if (!paused && queue.length) {
queue.shift()();
if (!paused) resume();
}
}
})();
そして、これは著者がtest()
関数をそのペースに設定する方法です:
test(function() {
pause();
setTimeout(function() {
assert(true, "First test completed");
resume();
}, 100);
});
test(function() {
pause();
setTimeout(function() {
assert(true, "Second test completed");
resume();
}, 200);
});
</script>
キューにプッシュされたすべての関数は、非同期呼び出しの前に呼び出す必要があり、非同期呼び出しが終了した後に呼び出す必要があることを理解しています。しかし、テストスイート自体がどのように終了するかわかりません。最後のテストが終了した後に呼び出され、. 私には無限ループのように思えます。誰か説明してくれませんか?pause()
resume()
pause
resume()
runTest()
setTimeout()