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

How to test asynchronous code in Jest? What methods are available for handling Promises and callbacks?

2月21日 15:54

Jest provides multiple methods for testing asynchronous code:

1. Using Callbacks:

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

2. Using Promises:

javascript
test('async promise', () => { return fetchData().then(data => { expect(data).toBe('data'); }); }); // Or using async/await test('async await', async () => { const data = await fetchData(); expect(data).toBe('data'); });

3. Using resolves and rejects:

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

4. Testing Timers:

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

Best Practices:

  • Prefer async/await for clearer code
  • Ensure returning Promise or calling done
  • Use resolves and rejects to simplify assertions
  • Use jest.useFakeTimers() when testing timers
  • Set reasonable timeout (default is 5 seconds)
标签:Jest