在我的测试中,我想替换 setTimeout 方法,以便测试运行得更快。
最初我有一段使用“any”的等效代码...但是当然 eslint 等 bleats。
我现在有了这段代码,但最后却没有任何内容。
let defaultTimeout: typeof globalThis.setTimeout;
beforeEach(() => {
defaultTimeout = global.setTimeout;
globalThis.setTimeout = (callback: TimerHandler) => { (1)
defaultTimeout(callback, 500);
};
})
但是,我在 globalThis.setTimeout 处仍然遇到错误
TS2741:类型中缺少属性promisify(回调: TimerHandler) => void 但在 typeof setTimeout 类型中是必需的 timers.d.ts(161, 19):在这里声明了promisify。
我知道我可以通过使用任何和未知来解决这个问题......还有其他方法吗?
覆盖
setTimeout
、setInterval
、console.*
等函数是不好的做法。你为什么要这样做?您考虑过使用计时器模拟吗?
我假设你使用 Jest 或 Vitest,无论如何逻辑是相同的。
如果您只想跳过计时器,您可以这样做
jest.useFakeTimers();
// Your test code goes here...
expect(true).toEqual(true);
jest.runAllTimers();
jest.useRealTimers();
jest.runAllTimers();
行就是执行此操作的那条线,“快进”计时器,请在此处阅读更多信息:https://jestjs.io/docs/jest-object#jestrunalltimers