【问题标题】:setTimeout is not being called from unit tests未从单元测试中调用 setTimeout
【发布时间】:2015-03-05 02:27:54
【问题描述】:

我正在为我的项目编写打字稿,我使用 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) 中),这没有任何帮助。

【问题讨论】:

  • 你能给我们看一下测试吗?没有它,我们只是在猜测问题所在。

标签: javascript typescript qunit sinon


【解决方案1】:

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

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

【讨论】:

  • 抱歉延迟回复。是的,这就是问题所在。我不得不使用异步:真。想通了,但忘记更新线程了。谢谢:)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2012-04-28
    • 2018-06-13
    相关资源
    最近更新 更多