这个内置JavaScript的异步测试套件将如何终止?
下面是如何实现一个测试套件的实现,该套件使用Jon Resig的书中的中央计时器控件执行异步测试。 这就是作者如何将这个内置JavaScript的异步测试套件将如何终止?,javascript,asynchronous,timer,Javascript,Asynchronous,Timer,下面是如何实现一个测试套件的实现,该套件使用Jon Resig的书中的中央计时器控件执行异步测试。 这就是作者如何将test()函数设置为其速度的方法: test(function() { pause(); setTimeout(function() { assert(true, "First test completed"); resume(); }, 100); });
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>
测试(函数(){
暂停();
setTimeout(函数(){
断言(正确,“第一次测试完成”);
恢复();
}, 100);
});
测试(函数(){
暂停();
setTimeout(函数(){
断言(正确,“第二次测试完成”);
恢复();
}, 200);
});
我知道,被推入队列的每个函数都需要在异步调用之前调用pause()
,并且需要在异步调用结束后调用resume()
。
但我看不到测试套件将如何结束。在最后一个测试结束时,pause
标志的值将为false,因为最后一个测试将在完成自身后调用resume()
,然后依次使用setTimeout()调用runTest()
。在我看来就像一个无限循环。谁能解释一下吗
[…]使用setTimeout()
依次恢复调用runTest()
是的,但是runTest()
没有做任何事情(因为队列。长度将是0
,这是错误的):没有运行新的测试,没有进一步调用resume()
,什么都没有。但是如果(!暂停)resume()
将再次调用resume()
。不是吗?@Geek:不是,因为它嵌套在if(!paused&&queue.length)
块中。啊,我明白了。我不知道我怎么会忽视这一点。
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>