Jest 中应使用 await expect().resolves 断言 Promise 成功结果,它自动等待并解包 value,支持链式匹配器;若 Promise reject 则测试自动失败,避免未捕获异常或断言遗漏。

直接用 await + expect().resolves 断言,这是 Jest 中验证 Promise 成功结果最清晰、最安全的方式。它自动等待 Promise 完成,并在 resolve 时提取 value 进行后续匹配,同时防止未处理的 rejection 干扰测试。
用 .resolves 断言成功值
Promise 成功(fulfilled)时,.resolves 会解包 value,支持链式匹配器:
await expect(fetchUser(123)).resolves.toEqual({ id: 123, name: 'Alice' })await expect(api.login('u', 'p')).resolves.toBeTruthy()await expect(delay(100)).resolves.toBeUndefined()
如果 Promise 被 reject,测试会自动失败,并提示 “Expected the promise not to be rejected” —— 无需额外 catch 或 try/catch。
避免常见错误写法
这些方式容易出错或语义不清:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- ❌
expect(await fetchUser(123)).toEqual(...):若 Promise 拒绝,会抛未捕获异常,导致测试崩溃而非失败 - ❌
expect(fetchUser(123)).resolves(没接匹配器):语法不完整,测试会通过但无实际校验 - ❌
fetchUser(123).then(res => expect(res).toEqual(...)):缺少 await,测试函数可能提前结束,造成“test completed without running any assertions”
需要检查返回结构或类型时
.resolves 可配合多种匹配器精确验证:
.resolves.toMatchObject({ status: 'ok', data: expect.any(Array) }).resolves.toHaveProperty('token')-
.resolves.toBeInstanceOf(Response)(适用于 fetch 返回的 Response 实例)
注意:不要用 .resolves.toEqual(new Error(...)),那是用来断言错误对象的,而成功结果不该是 Error 实例。
async 函数返回值也一样处理
async 函数返回的本身就是 Promise,所以无需包装:
- ✅ 正确:
await expect(getUserProfile()).resolves.toContain('email') - ❌ 错误:
expect(async () => getUserProfile()).resolves...(这断言的是函数本身,不是调用结果)
只要函数内部 return 了值,await expect(...) 就能拿到那个值做断言。

















