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();

文档:http://api.qunitjs.com/async/

sinonjs为此提供了'Faking time'api,尝试如下:

clock = sinon.useFakeTimers();
//execute your code which contains setTimeout function herer
clock.tick();
assert();
clock.restore();