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?
答案 0 :(得分:0)
你这样做的方式意味着你预计在ACalled发生后直接发生了BCalled。但是,你也说过应该延迟一秒钟。
如果不进入设计,您可以将期望包装在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);
}
答案 1 :(得分:0)
当您调用setTimeout()
时,它会将您的函数添加到将在当前范围之后执行的堆栈中。更新您的代码后,如果您在expect(BCalled).to.be.ok
之后拨打doSoemthingB()
,则会收到预期的答案。它看起来像:
functionDoThings = function(){
var BCalled = false;
doSomethingA();
setTimeout(function(){
doSoemthingB();
expect(BCalled).to.be.ok
}, 1000);
}