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