<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
#results li.pass{color:green;}
#results li.fail{color:red;}
</style>
</head>
<body>
<ul id="results"></ul>
<script>
var results,paused=false,queue=[];
this.test=function(name,fn){
console.log(1);
queue.push(function(){
results=document.getElementById("results");
results=assert(true,name).appendChild(
document.createElement("ul"));
fn();
});
runTest();
}
this.assert=function(value,desc){
var li=document.createElement("li");
li.className=value?"pass":"fail";
li.appendChild(document.createTextNode(desc));
results.appendChild(li);
if(!value){
li.parentNode.parentNode.className="fail";
}
return li;
}
this.pause=function(){
paused=true;
}
this.resume=function(){ //使得被被打断的程序重新执行,递归直到队列里面没有函数
paused=false;
setTimeout(runTest,1); //一下也不暂停,就全部执行完
} //一旦遇到暂停,其他入队列,但他们的runTest都被打断了,
this.runTest=function(){ //所以需要一个递归调用,使得程序得以继续执行直到队列完成
if(!paused&&queue.length){
queue.shift()();
}
if(!paused){
resume();
} //解决同步异步交叉
}
test("test1",function(){
assert(true,"aaa");
assert(false,"aaaaa");
resume();
})
test("test2",function(){
assert(true,"xxx");
assert(false,"sgrsegf");
})
test("test3",function(){
pause();
setTimeout(function(){
assert(true,"aaa");
assert(false,"aaaaa");
resume();
},3000);
})
//现在没有被暂停,那么就进一个队列,执行一次。
//如果被暂停,剩下的在暂停时,会进入队列。
//遇到异步就暂停全部输出,其他的先进入队列,直到时间延迟结束。
</script>
</body>
</html>
异步测试
最新推荐文章于 2025-02-15 23:03:04 发布