Skip to main content
Version: 29.7

从 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() 的支持,这意味着像 uuidnanoid 这样在 Jest@28 中无法正常工作的软件包无需额外的 polyfill 即可工作。

pretty-format

ConvertAnsi 插件已从 pretty-format 包中删除,取而代之的是 jest-serializer-ansi-escapes

jest-mock

jest-mock 包导出 Mocked* 工具类型已更改。 MaybeMockedDeepMaybeMocked 现在分别导出为 MockedMockedShallow; 仅暴露了 MockedClassMockedFunctionMockedObject 的深度模拟变体。

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});