From eceb6387f02e8ace8899dee5a511d703551a65d3 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 18 Oct 2022 14:29:53 +0200 Subject: [PATCH 1/2] fix(jest-environment-node): make `performance` writable --- .../jest-config/src/__tests__/normalize.test.ts | 14 ++++++++------ packages/jest-environment-node/src/index.ts | 5 ++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/jest-config/src/__tests__/normalize.test.ts b/packages/jest-config/src/__tests__/normalize.test.ts index f5fc31b6cb14..9e70d96dd220 100644 --- a/packages/jest-config/src/__tests__/normalize.test.ts +++ b/packages/jest-config/src/__tests__/normalize.test.ts @@ -1082,6 +1082,10 @@ describe('preset', () => { jest.requireActual('./jest-preset.json'), ); + const errorMessage = semver.satisfies(process.versions.node, '<19.0.0') + ? /Unexpected token } in JSON at position (104|110)[\s\S]* at / + : 'SyntaxError: Expected double-quoted property name in JSON at position 104'; + await expect( normalize( { @@ -1090,9 +1094,7 @@ describe('preset', () => { }, {} as Config.Argv, ), - ).rejects.toThrow( - /Unexpected token } in JSON at position (104|110)[\s\S]* at /, - ); + ).rejects.toThrow(errorMessage); }); test('throws when preset evaluation throws type error', async () => { @@ -1105,9 +1107,9 @@ describe('preset', () => { {virtual: true}, ); - const errorMessage = semver.satisfies(process.versions.node, '>=16.9.1') - ? "TypeError: Cannot read properties of undefined (reading 'call')" - : /TypeError: Cannot read property 'call' of undefined[\s\S]* at /; + const errorMessage = semver.satisfies(process.versions.node, '<16.9.1') + ? /TypeError: Cannot read property 'call' of undefined[\s\S]* at / + : "TypeError: Cannot read properties of undefined (reading 'call')"; await expect( normalize( diff --git a/packages/jest-environment-node/src/index.ts b/packages/jest-environment-node/src/index.ts index 5d326167e133..a48507a99e2c 100644 --- a/packages/jest-environment-node/src/index.ts +++ b/packages/jest-environment-node/src/index.ts @@ -90,7 +90,10 @@ export default class NodeEnvironment implements JestEnvironment { configurable: descriptor.configurable, enumerable: descriptor.enumerable, value: val, - writable: descriptor.writable, + writable: + descriptor.writable === true || + // Node 19 makes performance non-readable. This is probably not the correct solution. + nodeGlobalsKey === 'performance', }); return val; }, From e7383482724c3538a87e684fb6a641823f90f24b Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 18 Oct 2022 14:38:30 +0200 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d559084a4e5d..9a1c5e6f1d21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### Fixes +- `[jest-environment-node]` make `globalThis.performance` writable for Node 19 and fake timers ([#13467](https://github.com/facebook/jest/pull/13467)) + ### Chore & Maintenance ### Performance