Jest 如何测试 Promise 里面的 setTimeout
const delay = (time = 0) => new Promise((resolve) => setTimeout(resolve, time));
jest 如何测试这个函数
我现在这样写的,没有通过
it('测试 createContext context.delay 延时是否成功', async () => {
expect.assertions(1);
const context = createContext(api, namespace);
const callback = jest.fn();
// 延时 1000 毫秒
context.delay(1000).then(callback);
jest.advanceTimersByTime(1000);
const asyncTest = async () => {
expect(callback).toBeCalled();
};
await asyncTest();
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
把 async 改成了原生的 setTimeout ,测试通过
猜测是因为 async 是微任务,setTimeout 是宏任务 ,所以用 async 包裹测试代码,promise 里面的 setTimeout 总是后于 async 执行,用宏任务的 setTimeout 包裹测试代码就解决了执行顺序的问题
控制台输出:
自己试着修改了一下,也是不行。我觉得换个思路,不要去测试promise,直接测试setTimeout函数吧。实际开发过程中测试覆盖率达到100%,基本也是很困难的