乐闻世界logo
搜索文章和话题

如何在 Jest 中测试异步代码?有哪些方法可以处理 Promise 和回调?

2月21日 15:54

Jest 提供了多种测试异步代码的方法:

1. 使用回调函数:

javascript
test('async callback', (done) => { fetchData(callback => { expect(callback).toBe('data'); done(); }); });

2. 使用 Promise:

javascript
test('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:

javascript
test('promise resolves', () => { return expect(fetchData()).resolves.toBe('data'); }); test('promise rejects', () => { return expect(fetchData()).rejects.toThrow('error'); });

4. 测试定时器:

javascript
jest.useFakeTimers(); test('timer callback', () => { const callback = jest.fn(); setTimeout(callback, 1000); jest.runAllTimers(); expect(callback).toHaveBeenCalled(); });

最佳实践:

  • 优先使用 async/await,代码更清晰
  • 确保返回 Promise 或调用 done
  • 使用 resolvesrejects 简化断言
  • 测试定时器时使用 jest.useFakeTimers()
  • 设置合理的超时时间(默认 5 秒)
标签:Jest