2026/10/14 20:34:08

Jasmine Core 6.1.0 发布说明详解:AggregateError 底层错误报告与支持环境调整

Jasmine Core 6.1.0 发布说明详解:AggregateError 底层错误报告与支持环境调整 测试质量保障【免费下载链接】jasmineSimple JavaScript testing framework for browsers and node.js项目地址https://gitcode.com/gh_mirrors/ja/jasmine点击查看免费下载本文基于 release_notes/6.1.0.md 展开解读 Jasmine Core 6.1.0 的三个核心变化对AggregateError底层错误的栈跟踪报告、JsDoc 中MAX_PRETTY_PRINT_CHARS默认值的修正以及测试支持环境表中 Safari 16/17 的下线。读完本文你既能完整掌握该版本的发布内容与适用环境也能从 ExceptionFormatter.js 源码层面理解聚合错误是如何被递归格式化并输出到测试失败信息中的。一、版本定位6.1.0 在 6.x 系列中的位置6.1.0 是紧跟 6.0.0 小版本发布。回顾 6.0.0 发布说明那是一个包含大量破坏性变更的大版本移除私有 API、重写 HTML 报告器、调整 reporter 事件结构等而 6.1.0 则是面向生态稳定的小步迭代唯一的新功能报告构成AggregateError的底层错误对应上游 PR #2093来自 puglyfe修复 issue #2063一项文档修正修复 JsDoc 中MAX_PRETTY_PRINT_CHARS的默认值说明PR #2091来自 HolgerJeromin支持环境变化Safari 16 和 17 不再受支持同时各浏览器受测版本随之更新。需要注意适用前提当前仓库主干已演进到 7.x见 package.json 中version: 7.0.27.0 已进一步移除了对 karma-jasmine 等遗留 Angular 工具的兼容。6.1.0 的发布说明适合用于理解 6.x 过渡期的行为基线若你在升级到 7.x应以 7.x 的发布说明为最终依据。二、新功能报告AggregateError的底层错误2.1 问题背景AggregateError是 ECMAScript 标准内置的错误类型用于表示多个错误被打包成一次抛出的场景其errors属性保存着每个子错误的数组。在旧版本中Jasmine 格式化这类错误时只输出聚合错误本身的消息和栈errors数组里的具体子错误被完全忽略——开发者看到的是发生了多个错误却看不到到底发生了哪几个错误只能靠人工重新构造才能定位。6.1.0 之后失败的期望与 spec 的栈跟踪中会列出每一个底层错误及其完整调用栈。2.2 源码实现ExceptionFormatter 对 errors 数组的递归处理该功能的实现集中在 ExceptionFormatter.js 的stack_方法中该方法是stack的内部实现负责把一个错误格式化成多行文本if (Array.isArray(error.errors)) { for (let i 0; i error.errors.length; i) { if (error.errors[i] instanceof Error) { lines.push(); const substack this.stack_(error.errors[i], { messageHandling: require }); substack[0] Error (i 1) : substack[0]; lines lines.concat(substack.map(x x)); } } }见 ExceptionFormatter.js#L81-L92。可以从中读出四个关键行为触发条件是error.errors为数组。实现没有判断instanceof AggregateError只要错误对象上带有errors数组属性就会展开因此同时兼容原生AggregateError和手工挂载errors属性的普通Error编号与缩进每个子错误的首行被改写为Error N: 消息N 从 1 开始并整体缩进 3 个空格与外层栈帧区分递归展开子错误同样走stack_格式化因此嵌套的AggregateError会逐层展开内层聚合错误的子错误仍会在其自己的作用域内编号为Error 1、Error 2……静默跳过非 Error 成员errors数组中不是Error实例的元素字符串、对象、null等直接被忽略不会导致格式化过程抛出异常。与之配套ignoredProperties列表中加入了errors见 ExceptionFormatter.js#L4-L16避免errors数组再以error properties的形式被重复打印一遍。值得注意的是该方法与既有的cause链格式化Caused by: ...见 ExceptionFormatter.js#L73-L79是相互独立的一个带cause链的错误被聚合进errors数组时其Caused by子栈也会一并输出。2.3 输出形态结合测试用例解读测试用例位于 ExceptionFormatterSpec.js 的when the error has an errors array (AggregateError)区块。以最基础的用例L358-L414为例三个错误分别由fn1、fn2、fn3抛出并聚合成aggregateError格式化后的期望输出模式为Error: Multiple errors occurred at fn3 (ExceptionFormatterSpec.js:...) ... Error 1: Error: first error at fn1 (ExceptionFormatterSpec.js:...) ... Error 2: Error: second error at fn2 (ExceptionFormatterSpec.js:...) ...即先是聚合错误自身的消息与栈随后每个子错误以空行分隔带Error N:前缀和 3 空格缩进。测试用正则模式精确断言了该结构包括^ Error 1: Error: first error$这类行格式。其余用例覆盖了几个边界场景可作为行为契约直接引用空errors数组不抛出异常正常输出聚合错误本身L416-L424嵌套AggregateError外层聚合包含一个内层聚合和一个普通错误输出中依次出现Error 1: Error: Inner aggregate、其内部的Error 1/2以及外层的Error 2: Error: outer error顺序为深度优先L426-L458聚合成员自带 cause 链Error 1:之后还能看到Caused by: Error: root causeL460-L480混入非 Error 成员字符串、普通对象、null、undefined、数字均被跳过只有真正的Error出现在输出中L482-L511原生构造器new AggregateError([error1, error2], Multiple messages)同样被正确展开L513-L533。2.4 输出如何到达测试报告ExceptionFormatter的产物最终进入每条失败期望的结果对象。在 buildExpectationResult.js 中message字段调用exceptionFormatter.message(options.error)L55而stack字段调用exceptionFormatter.stack(error, { omitMessage: true })L78——消息行被刻意省略因为message已单独携带避免重复。这意味着无论是expect(...).toThrow(...)抛出的AggregateError还是 spec 中直接 reject 的聚合错误其底层错误栈都会随failedExpectation的stack属性分发给 reporter并在 HTML/控制台报告中逐条呈现。三、文档改进修正MAX_PRETTY_PRINT_CHARS的 JsDoc 默认值6.1.0 修复了 API 文档中jasmine.MAX_PRETTY_PRINT_CHARS默认值标注错误的问题PR #2091。以源码为准该常量的真实定义是/** * Maximum number of UTF-16 code units to display when pretty printing objects. * Characters past this number will be ellipised. * name jasmine.MAX_PRETTY_PRINT_CHARS * default 1000 * since 2.9.0 */ j$.MAX_PRETTY_PRINT_CHARS 1000;见 base.js#L21-L28。即默认值为 1000语义是美化打印对象时最多显示的 UTF-16 码元数量超出部分以省略号截断自 2.9.0 起引入。这个上限在实际代码中的两个消费点PrettyPrinter.js#L314打印字符串类值时按MAX_PRETTY_PRINT_CHARS - 当前已打印长度做截断DiffBuilder.js#L123 与 diffAwareTruncate.jstoEqual等匹配器生成差异报告时会在此长度上限内智能保留差异片段及其前置上下文。diffAwareTruncate.js#L27-L39 的注释明确写道若需要同时呈现多处相距较远的差异用户应当相应调大MAX_PRETTY_PRINT_CHARS——这也解释了为什么文档中的默认值必须准确它直接影响用户排查为什么 diff 被截断时的决策。四、支持环境变化与测试环境矩阵4.1 Safari 16/17 不再受支持6.1.0 的发布说明明确指出Safari 16 和 17 不再受支持。虽然 jasmine-core 可能在这些版本中仍能运行但我们已经没有可靠的测试手段未来版本也不会再尝试维护对其兼容。对比前两个版本的环境表即可看出这条决策的落地过程版本Safari 受测版本ChromeEdge6.0.016, 17, 26.21431436.0.116, 17, 26.21431436.1.026.3144144从源码仓库侧也可以印证这一支持策略的延续package.json 中的browserslist配置为Safari 26、Firefox 140、last 2 Chrome versions、last 2 Edge versions当前主干已完全不覆盖 Safari 16/17。4.2 6.1.0 的完整受测环境表以下表格完整继承自 release_notes/6.1.0.md即该版本在这些环境中被实际测试过EnvironmentSupported versionsNode20, 22, 24Safari26.3**Chrome144*Firefox102**, 115**, 128**, 140, 147*Edge144*脚注含义*Evergreen 浏览器每个 Jasmine 版本都在发布时对照当时可用的最新版本进行测试**尽力支持这些版本以 best-effort 方式支持若维护变得不切实际可能会被移除且仅影响这些版本的 bug 可能不会被当作发版阻断项。注意 Safari 26.3 与 Firefox 102/115/128 都落在这一档Node 的三个 LTS 版本20/22/24则为常规支持。4.3 这些测试是如何执行的仓库内的脚本可以说明上述矩阵的验证路径以当前仓库脚本为准6.1.0 发布时的 CI 配置与之对应Node 侧npm test等价于node scripts/runSpecsInNode.js npm run lint即在 Node 中跑完整个 spec 套件并执行 ESLint/Prettier 检查另有npm run test:parallel通过 runSpecsInParallel.js 验证并行执行路径浏览器侧npm run ci调用 ci.js它基于jasmine-browser-runner加载 spec/support/jasmine-browser.js 配置浏览器由环境变量JASMINE_BROWSER选择默认 firefox设置USE_SAUCEtrue后则通过 Sauce Labs 的 Selenium Grid 远程执行SAUCE_BROWSER_VERSION/SAUCE_OS决定具体受测版本——这正是Safari 26.3**、Firefox 102**这类条目被实际跑出来的机制。五、小结Jasmine Core 6.1.0 是一个聚焦看得更清楚的小版本错误可见性AggregateError的每个底层错误含嵌套聚合与cause链都会带Error N:前缀、3 空格缩进地进入失败期望的栈跟踪实现位于 ExceptionFormatter.js行为契约由 ExceptionFormatterSpec.js 六个用例固化文档准确性jasmine.MAX_PRETTY_PRINT_CHARS的 JsDoc 默认值修正为与 base.js 源码一致的1000支持边界收缩Safari 16/17 退出支持矩阵受测浏览器更新至 Node 20/22/24、Safari 26.3、Chrome/Edge 144、Firefox 至 147。如果你的测试中出现AggregateError例如某些并发请求被打包拒绝的场景升级到 6.1.0 或更高版本后无需任何额外配置即可在失败输出中直接看到全部子错误的栈而不必再逐个手动打印。赞分享测试质量保障【免费下载链接】jasmineSimple JavaScript testing framework for browsers and node.js项目地址https://gitcode.com/gh_mirrors/ja/jasmine点击查看免费下载相关推荐Jasmine 5.12.1 发布解读顶层 spec 自定义匹配器修复与支持环境详解Jasmine 5.12.1 发布解读顶层 spec 自定义匹配器修复与支持环境详解 本篇文章围绕 Jasmine Core 5.12.1 的官方发布说明展开测试质量保障Jasmine 5.2.0 版本发布说明深度解析Bug 修复、toHaveSize 错误消息与 HTML 报告器改进Jasmine 5.2.0 版本发布说明深度解析Bug 修复、toHaveSize 错误消息与 HTML 报告器改进 本指南以 Jasmine Core 5.测试质量保障Jasmine Core 6.0.1 深度解读ES Module 加载弃用警告的误报修复与受支持环境矩阵Jasmine Core 6.0.1 深度解读ES Module 加载弃用警告的误报修复与受支持环境矩阵 Jasmine Core 6.0.1 是一个小型 b测试质量保障上一篇AI系统透明化5个关键步骤让你真正理解AI助手的工作机制下一篇小红书下载神器XHS-Downloader终极指南与实战教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考