【发布时间】:2020-03-10 12:29:39
【问题描述】:
我有一个函数等待
async function wait(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
我将这个等待称为:await wait(5000); 来自不同的函数。
我在写单元测试用例,它总是执行wait,每个测试用例等待5s。
如何使用 Sinon 存根 setTimeout?
我试过了:
// Skip setTimeOut
clock = sinon.useFakeTimers({
now: Date.now(),
toFake: ['setTimeout']
});
await clock.tickAsync(4000);
await Promise.resolve();
但是没有用。
【问题讨论】:
-
你为什么要这样做?这是标准规定的功能。另外,这是 Javascript,您不需要模拟库来覆盖全局函数...
-
@JaredSmith 单元测试用例的执行延迟了 50 秒,因为我有 10 个用于该方法的单元测试用例。
-
所以传递一个 0 的时间。它将在事件循环的下一个滴答声中触发。然后以 1 毫秒的延迟运行您的测试,而不是 4000 毫秒。
-
但是从单元测试用例传递 0 不会影响实际的函数行为。
-
你想得太多了。如果以 5 秒的延迟测试行为很重要,那么您将不得不为每个需要它的测试吃掉这 5 秒。如果不是,则传递一个零并完成它。如果您编写代码的方式无法做到这一点,请重写代码。说了这么多,
globalThis.setTimeout = (cb) => cb();
标签: javascript node.js unit-testing sinon