setTimeout 未从单元测试中调用
setTimeout is not being called from unit tests
我正在为我的项目编写打字稿,其中我使用 QUint 和 sinonjs 进行单元测试。我的一个函数动态呈现 UI。我需要获取此动态渲染元素的宽度并将其用于其他计算。为了确保正确计算宽度,我使用了 setTimeout。代码如下所示:
public function1(): void {
this._createShowMoreUI();
setTimeout(delegate(this, this.function2), 0);
}
private function2(): void {
// use this._element.width();
}
总的来说一切正常。但是当从单元测试中调用 function1 时,function2 永远不会被调用。谷歌搜索只是向我指出了如何模拟 setTimeout 或错误使用 setTimeout 的情况(如 setTimeout(function2(),0)),这没有任何帮助。
setTimeout
可能工作正常,您需要做的是启用 async
进行测试。对于 Qunit,您需要调用 assert.async();
sinonjs为此提供了'Faking time'api,尝试如下:
clock = sinon.useFakeTimers();
//execute your code which contains setTimeout function herer
clock.tick();
assert();
clock.restore();
我正在为我的项目编写打字稿,其中我使用 QUint 和 sinonjs 进行单元测试。我的一个函数动态呈现 UI。我需要获取此动态渲染元素的宽度并将其用于其他计算。为了确保正确计算宽度,我使用了 setTimeout。代码如下所示:
public function1(): void {
this._createShowMoreUI();
setTimeout(delegate(this, this.function2), 0);
}
private function2(): void {
// use this._element.width();
}
总的来说一切正常。但是当从单元测试中调用 function1 时,function2 永远不会被调用。谷歌搜索只是向我指出了如何模拟 setTimeout 或错误使用 setTimeout 的情况(如 setTimeout(function2(),0)),这没有任何帮助。
setTimeout
可能工作正常,您需要做的是启用 async
进行测试。对于 Qunit,您需要调用 assert.async();
sinonjs为此提供了'Faking time'api,尝试如下:
clock = sinon.useFakeTimers();
//execute your code which contains setTimeout function herer
clock.tick();
assert();
clock.restore();