从 v28 到 v29
将 Jest 从 v28 升级到 v29? This guide aims to help refactoring your configuration and tests.
See changelog for the full list of changes.
从旧版本升级? You can see the upgrade guide from v27 to v28 here.
Compatibility
支持的NodeJS版本是 14.15、16.10、18.0及以上版本。
快照格式
Jest 28 blog文章中宣布,Jest 29 已将默认快照格式更改为 {escapeString: false, printBasicPrototype: false}
如果你想要保留旧的行为,你可以设置snapshotFormat
属性为:
+ snapshotFormat: {
+ escapeString: true,
+ printBasicPrototype: true
+ }
JSDOM upgrade
jest-environment-jsdom
has upgraded jsdom
from v19 to v20.
If you use jest-environment-jsdom
, the minimum TypeScript version is set to 4.5
.
Notably, jsdom@20
includes support for crypto.getRandomValues()
, which means packages like uuid
and nanoid
, which doesn't work properly in Jest@28, can work without extra polyfills.
pretty-format
ConvertAnsi
plugin is removed from pretty-format
package in favour of jest-serializer-ansi-escapes
.
jest-mock
Exports of Mocked*
utility types from jest-mock
package have changed. MaybeMockedDeep
and MaybeMocked
now are exported as Mocked
and MockedShallow
respectively; only deep mocked variants of MockedClass
, MockedFunction
and MockedObject
are exposed.
TypeScript
The TypeScript examples from this page will only work as documented if you explicitly import Jest APIs:
import {expect, jest, test} from '@jest/globals';
Consult the Getting Started guide for details on how to setup Jest with TypeScript.
jest.mocked()
The jest.mocked()
helper method now wraps types of deep members of passed object by default. If you have used the method with true
as the second argument, remove it to avoid type errors:
- const mockedObject = jest.mocked(someObject, true);
+ const mockedObject = jest.mocked(someObject);
To have the old shallow mocked behavior, pass {shallow: true}
as the second argument:
- const mockedObject = jest.mocked(someObject);
+ const mockedObject = jest.mocked(someObject, {shallow: true});