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();
});
把 async 改成了原生的 setTimeout ,测试通过
猜测是因为 async 是微任务,setTimeout 是宏任务 ,所以用 async 包裹测试代码,promise 里面的 setTimeout 总是后于 async 执行,用宏任务的 setTimeout 包裹测试代码就解决了执行顺序的问题
控制台输出: