从 v28 到 v29
将 Jest 从 v28 升级到 v29? 本指南旨在帮助重构你的配置和测试。
有关更改的完整列表,请参阅 changelog。
从旧版本升级? 你可以查看从 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()
的支持,这意味着像 uuid
和 nanoid
这样在 Jest@28 中无法正常工作的软件包无需额外的 polyfill 即可工作。
pretty-format
ConvertAnsi
插件已从 pretty-format
包中删除,取而代之的是 jest-serializer-ansi-escapes
。
jest-mock
从 jest-mock
包导出 Mocked*
工具类型已更改。 MaybeMockedDeep
和 MaybeMocked
现在分别导出为 Mocked
和 MockedShallow
; 仅暴露了 MockedClass
、MockedFunction
和 MockedObject
的深度模拟变体。
TypeScript
仅当你显式导入 Jest API 时,此页面中的 TypeScript 示例才会按照文档说明的方式工作:
import {expect, jest, test} from '@jest/globals';
有关如何使用 TypeScript 设置 Jest 的详细信息,请参阅 入门 指南。
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});