Jest 提供了多种测试异步代码的方法:
1. 使用回调函数:
javascripttest('async callback', (done) => { fetchData(callback => { expect(callback).toBe('data'); done(); }); });
2. 使用 Promise:
javascripttest('async promise', () => { return fetchData().then(data => { expect(data).toBe('data'); }); }); // 或者使用 async/await test('async await', async () => { const data = await fetchData(); expect(data).toBe('data'); });
3. 使用 resolves 和 rejects:
javascripttest('promise resolves', () => { return expect(fetchData()).resolves.toBe('data'); }); test('promise rejects', () => { return expect(fetchData()).rejects.toThrow('error'); });
4. 测试定时器:
javascriptjest.useFakeTimers(); test('timer callback', () => { const callback = jest.fn(); setTimeout(callback, 1000); jest.runAllTimers(); expect(callback).toHaveBeenCalled(); });
最佳实践:
- 优先使用 async/await,代码更清晰
- 确保返回 Promise 或调用 done
- 使用
resolves和rejects简化断言 - 测试定时器时使用
jest.useFakeTimers() - 设置合理的超时时间(默认 5 秒)