如何在 javascript 中测试 setTimeout 内部的函数
How to test a function that is inside of setTimeout in javascript?
functionDoThings = function(){
doSomethingA();
setTimeout(function(){
doSoemthingB();
}, 1000);
}
在我的测试代码中,我有
testDoThings = function(){
var ACalled, BCalled = false;
doSomethingA() = function(){ACalled = true;};
doSoemthingB() = function(){BCalled = true;};
functionDoThings();
expect(ACalled).to.be.ok; //Passed
expect(BCalled).to.be.ok; //Fail
}
这是因为期望(BCalled(被调用得太早了。如何测试在 setTimeout(( 中调用的 doSoemthingB?
您这样做的方式意味着您希望 BCalled 在 ACalled 发生后立即发生。 但是,你也说过应该有一秒钟的延迟。
在不进入设计的情况下,您也可以通过将期望包装在setTimeout()
中来测试它。
此外,您正在为函数调用分配一个值。 应该是doSomethingA = function(){ACalled = true}
这是要尝试的代码,它将向您展示它不起作用的原因。
testDoThings = function(){
var ACalled, BCalled = false;
doSomethingA = function(){ACalled = true;};
doSoemthingB = function(){BCalled = true;};
functionDoThings();
console.log(ACalled === true); // true
console.log(BCalled === true); // false
setTimeout(function(){
console.log(BCalled === true); // true
}, 1000);
}
当你调用 setTimeout()
时,它会将你的函数添加到将在当前作用域之后执行的堆栈中。更新您的代码,如果您将expect(BCalled).to.be.ok
放在调用doSoemthingB()
之后,将收到预期的答案。它看起来像:
functionDoThings = function(){
var BCalled = false;
doSomethingA();
setTimeout(function(){
doSoemthingB();
expect(BCalled).to.be.ok
}, 1000);
}
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- setInteval vs setTimeout
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- AngularJs指令,该指令创建内部有数据对象的新指令
- 调用setTimeout内部的函数时发生引用错误
- 如何清除Javascript对象内部的setTimeout
- 重复调用的同一函数会重置setTimeout内部函数
- 如何在 javascript 中测试 setTimeout 内部的函数
- Javascript:将参数传递给内部setTimeOut函数
- 不能传递参数给这个.settimeout内部的样式
- 使用setTimeout在自身内部调用函数
- 在setTimeout和函数内部调用函数
- 使用setTimeout从循环内部重新绘制html画布的推荐方法
- setTimeout内部调用的函数没有被调用