没有从单元测试中调用setTimeout

时间:2015-01-07 08:34:35

标签: javascript typescript qunit sinon

我正在处理我的项目的打字稿,我使用QUint和sinonjs进行单元测试。我的一个函数动态呈现UI。我需要获取这个动态渲染元素的宽度,并将其用于其他一些计算。为了确保正确计算宽度,我使用setTimeout。代码如下所示:

public function1(): void { 
this._createShowMoreUI();
    setTimeout(delegate(this, this.function2), 0);
}

private function2(): void { 
    // use this._element.width();
}

一般情况下一切正常。但是当从单元测试函数2调用function1时,永远不会调用它。谷歌搜索只是指出了如何模拟setTimeout或者错误地使用setTimeout的情况(如在setTimeout(function2(),0)中),这些都没有任何帮助。

2 个答案:

答案 0 :(得分:0)

setTimeout可能正常工作,您需要做的是为测试启用async。对于Qunit,您需要致电assert.async();

docs:http://api.qunitjs.com/async/

答案 1 :(得分:0)

sinonjs提供'伪造时间' api为此,尝试类似下面的事情:

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