Promise.allSettled 的测试重点是验证其不因任一 Promise 拒绝而中断,且返回所有 Promise 的最终状态;需覆盖全成功、全失败、混搭三种组合,检查结果结构、status 位置准确性及 reason/value 完整性。

Promise.allSettled 的测试重点是验证它**不因某个 Promise 拒绝而中断,且返回所有 Promise 的最终状态(fulfilled 或 rejected)**。测试不需要模拟异步调度细节,而是聚焦行为契约。
覆盖三种典型状态组合
用 Promise.resolve、Promise.reject 和真实异步操作混合构造输入数组,检查返回值结构是否符合规范:
- 全部成功 → 每个结果为
{ status: 'fulfilled', value: ... } - 全部失败 → 每个结果为
{ status: 'rejected', reason: ... } - 混搭(如 2 成功 + 1 失败)→ 对应位置返回对应 status,reason/value 不错位
显式等待异步完成,避免测试误判
不要依赖“同步写法”或未 await 的 Promise。必须用 await 或 return 等待 Promise.allSettled 完成:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
test('mixed promises', async () => {
const result = await Promise.allSettled([
Promise.resolve(42),
Promise.reject(new Error('oops')),
Promise.resolve('done')
]);
expect(result[0].status).toBe('fulfilled');
expect(result[1].status).toBe('rejected');
expect(result[2].value).toBe('done');
});
测试 reject 原因的完整性
被拒绝的 Promise,其 reason 必须与原始 reject 值一致(包括 Error 实例、字符串、null 等):
- 用
expect(result[i].reason).toBeInstanceOf(Error)验证 Error 类型 - 用
expect(result[i].reason.message).toBe('expected msg')校验错误内容 - 对非 Error 的 reject 值(如
Promise.reject('str')),直接比对result[i].reason === 'str'
可选:对比 Promise.all 行为差异
辅助理解时,可并列写一个 Promise.all 测试用例,突出 allSettled “不短路”的特性:
Promise.all([Promise.resolve(1), Promise.reject('boom')]) 会直接 reject;Promise.allSettled([...]) 则一定 resolve,并返回两个结果对象 —— 这正是你要测的核心。

















