这个在JavaScript中构建的异步测试套件将如何终止
How this asynchronous test suite built in JavaScript will terminate?
以下是如何实现一个测试套件的实现,该套件使用Jon Resig的《JavaScript忍者的秘密》一书中的中央计时器控件执行异步测试。
(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
标志的值将为false,因为最后一次的测试将在完成自身之后调用resume()
,并继续使用setTimeout()
调用runTest()
。在我看来就像一个无限的循环。有人能解释一下吗?
[…]resume依次用
setTimeout()
调用runTest()
。
是的,但runTest()
什么都不做(因为queue.length
将是0
,这是错误的):没有运行新的测试,没有对resume()
的进一步调用,什么都没有。
相关文章:
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 删除对象时终止setInterval
- 使用react native检测应用程序终止
- 网络工作者突然终止工作
- 未终止的字符串常量JavaScript
- 当传递innerHTML和(this.id)时,循环不会终止
- 函数输入上未终止的文本字符串
- 未处理的 JavaScript 异常终止 MSAppHost/WWAHost.exe
- 如何终止捕获
- 终止所有正在进行的XHR请求
- 如何在fancybox终止加载后调用javascript函数
- JavaScript 中数据库数据的未终止字符串文字
- Postgresql错误:连接已终止
- "未终止的模板文字“;当文字包含脚本标记时出现语法错误
- JavaScript For Loop - 执行终止条件
- 浏览器关闭时终止会话
- 如何在等待php客户端脚本的回复时终止php服务器脚本
- SCRIPT1015:加载字符串时未终止的字符串常量
- 终止无响应/无限循环的WebWorker(Javascript)