diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c74a6b548c5..0017592475c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - `[jest-resolve-dependencies]` Resolve mocks as dependencies ([#10713](https://github.com/facebook/jest/pull/10713)) - `[jest-runtime]` Handle file URLs in dynamic imports ([#10744](https://github.com/facebook/jest/pull/10744)) - `[jest-runtime, babel-jest]` Pass more ESM options to `@jest/transform` ([#10752](https://github.com/facebook/jest/pull/10752)) +- `[jest-runtime]` Properly inject `extraGlobals` into the runtime ([#10758](https://github.com/facebook/jest/pull/10758)) - `[jest-transform]` Link to ESM docs on syntax errors ([#10748](https://github.com/facebook/jest/pull/10748)) ### Chore & Maintenance diff --git a/e2e/__tests__/extraGlobals.test.ts b/e2e/__tests__/extraGlobals.test.ts new file mode 100644 index 000000000000..62d063f66895 --- /dev/null +++ b/e2e/__tests__/extraGlobals.test.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import {tmpdir} from 'os'; +import * as path from 'path'; +import {cleanup, createEmptyPackage, writeFiles} from '../Utils'; +import {json as runJest} from '../runJest'; + +const DIR = path.resolve(tmpdir(), 'extra-globals'); + +beforeEach(() => { + cleanup(DIR); + createEmptyPackage(DIR, {jest: {extraGlobals: ['Math']}}); +}); + +afterAll(() => cleanup(DIR)); + +test('works with injected globals', () => { + writeFiles(DIR, { + 'test.js': ` + test('Math works when injected', () => { + expect(Math.floor(1.5)).toBe(1); + }); + `, + }); + + const {exitCode} = runJest(DIR); + + expect(exitCode).toBe(0); +}); diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 1f8f8f7ef6a7..8a443a8eef9e 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1095,9 +1095,9 @@ class Runtime { this.jestObjectCaches.set(filename, jestObject); - const lastArgs: [Jest | undefined, ...Array] = [ + const lastArgs: [Jest | undefined, ...Array] = [ this._config.injectGlobals ? jestObject : undefined, // jest object - this._config.extraGlobals.map(globalVariable => { + ...this._config.extraGlobals.map(globalVariable => { if (this._environment.global[globalVariable]) { return this._environment.global[globalVariable]; } @@ -1126,6 +1126,7 @@ class Runtime { module.path, // __dirname module.filename, // __filename this._environment.global, // global object + // @ts-expect-error ...lastArgs.filter(notEmpty), ); } catch (error) {