从 v28 升级到 v29
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
正在将 Jest 从 v28 升级到 v29?本指南将帮助您重构配置和测试。
完整变更列表请参阅更新日志。
需要从更早版本升级?可在此处查看v27 到 v28 的升级指南。
兼容性
支持的 Node 版本为 14.15、16.10、18.0 及以上。
快照格式
正如在Jest 28 博客文章中预告的,Jest 29 已将默认快照格式改为 {escapeString: false, printBasicPrototype: false}。
如需保留旧行为,可将 snapshotFormat 属性设置为:
+ snapshotFormat: {
+ escapeString: true,
+ printBasicPrototype: true
+ }
JSDOM 升级
jest-environment-jsdom 已将 jsdom 从 v19 升级到 v20。
若使用 jest-environment-jsdom,最低 TypeScript 版本要求为 4.5。
值得注意的是,jsdom@20 支持了 crypto.getRandomValues(),这意味着在 Jest@28 中无法正常工作的 uuid、nanoid 等包现在无需额外 polyfill 即可运行。
pretty-format
pretty-format 包中的 ConvertAnsi 插件已被移除,改用 jest-serializer-ansi-escapes。
jest-mock
jest-mock 包中的 Mocked* 工具类型导出方式已变更:MaybeMockedDeep 和 MaybeMocked 现在分别导出为 Mocked 和 MockedShallow;仅保留 MockedClass、MockedFunction 和 MockedObject 的深度模拟变体。
TypeScript
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
本页中的 TypeScript 示例仅在显式导入 Jest API 的情况下才能按文档所述正常工作:
import {expect, jest, test} from '@jest/globals';
有关如何设置 Jest 与 TypeScript 配合使用的详细信息,请查阅入门指南。
jest.mocked()
jest.mocked() 辅助方法现在默认会深度封装传入对象的成员类型。若您曾将 true 作为第二个参数传入,请移除该参数以避免类型错误:
- const mockedObject = jest.mocked(someObject, true);
+ const mockedObject = jest.mocked(someObject);
如需保留旧的浅层模拟行为,请将 {shallow: true} 作为第二个参数传入:
- const mockedObject = jest.mocked(someObject);
+ const mockedObject = jest.mocked(someObject, {shallow: true});