跳转至主内容
版本:下一个

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