目录1. 异步测试哪里特殊?2. 异步测试基本模式 2.1. test('...', (done) => {...}) 模式 2.2. Promise 模式 2.3. Async|Await 模式3. expect.hasAssertions()、expect.assertions(number)4. .resolves、.rejects
1. 异步测试哪里特殊?
在JavaScript中执行异步代码是很常见的。当你有以异步方式运行的代码时,Jest 需要知道当前它测试的代码是否已完成,然后它可以转移到另一个测试。
经典错误:
默认情况下,Jest 测试一旦执行到末尾就会完成。
问题在于一旦 fetchData 执行结束,此测试就在没有调用回调函数前结束。
function fetchData(callback) {
setTimeout(() => callback('peanut butter'), 5 * 1000);}// 经典错误test('the data is peanut butter', () => {
function callback(data) {
expect(data).toBe('peanut butter'); } fetchData(callback);});
2. 异步测试基本模式
2.1. test('...', (done) => {...}) 模式
Jest will wait if you provide an argument to the test function, usually called done.
默认测试超时时间:5s
可通过 testTimeout 选项配置
function fetchData(callback) {
setTimeout(() => callback('peanut bu