跳到主要內容
版本:29.7

從 v28 到 v29

要將 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() 的支援,這表示像 uuidnanoid 等套件,這些套件在 Jest@28 中無法正常運作,現在可以在沒有額外多重填補的情況下運作。

pretty-format

ConvertAnsi 外掛程式已從 pretty-format 套件中移除,取而代之的是 jest-serializer-ansi-escapes

jest-mock

Mocked* 實用程式類型的匯出已從 jest-mock 套件中變更。MaybeMockedDeepMaybeMocked 現在分別匯出為 MockedMockedShallow;只有 MockedClassMockedFunctionMockedObject 的深度模擬變體會公開。

TypeScript

資訊

此頁面的 TypeScript 範例只有在您明確匯入 Jest API 時才會如文件所述運作

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