From a82babdd3a399d81acc23dafbf0674a1cf3db7ab Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 4 Nov 2020 18:28:35 +0100 Subject: [PATCH] fix: do not inject `global` variable into module wrapper (#10644) --- CHANGELOG.md | 1 + e2e/__tests__/global-mutation.test.ts | 12 ++++++++++++ packages/jest-environment-jsdom/src/index.ts | 3 +++ packages/jest-environment/src/index.ts | 1 - .../src/__tests__/__snapshots__/runtime_wrap.js.snap | 4 ++-- packages/jest-runtime/src/index.ts | 4 +--- 6 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 e2e/__tests__/global-mutation.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index b46e5f0562d6..38ef17254f20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### Fixes +- `[jest-runtime]` [**BREAKING**] Do not inject `global` variable into module wrapper ([#10644](https://github.com/facebook/jest/pull/10644)) - `[jest-transform]` Show enhanced `SyntaxError` message for all `SyntaxError`s ([#10749](https://github.com/facebook/jest/pull/10749)) - `[jest-transform]` [**BREAKING**] Refactor API to pass an options bag around rather than multiple boolean options ([#10753](https://github.com/facebook/jest/pull/10753)) diff --git a/e2e/__tests__/global-mutation.test.ts b/e2e/__tests__/global-mutation.test.ts new file mode 100644 index 000000000000..828ee674f347 --- /dev/null +++ b/e2e/__tests__/global-mutation.test.ts @@ -0,0 +1,12 @@ +/** + * 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. + */ + +const global = 'woo!'; + +test('can redefine global', () => { + expect(global).toBe('woo!'); +}); diff --git a/packages/jest-environment-jsdom/src/index.ts b/packages/jest-environment-jsdom/src/index.ts index e34a62e67e61..cb383201364b 100644 --- a/packages/jest-environment-jsdom/src/index.ts +++ b/packages/jest-environment-jsdom/src/index.ts @@ -45,6 +45,9 @@ class JSDOMEnvironment implements JestEnvironment { throw new Error('JSDOM did not return a Window object'); } + // for "universal" code (code should use `globalThis`) + global.global = global; + // In the `jsdom@16`, ArrayBuffer was not added to Window, ref: https://github.com/jsdom/jsdom/commit/3a4fd6258e6b13e9cf8341ddba60a06b9b5c7b5b // Install ArrayBuffer to Window to fix it. Make sure the test is passed, ref: https://github.com/facebook/jest/pull/7626 global.ArrayBuffer = ArrayBuffer; diff --git a/packages/jest-environment/src/index.ts b/packages/jest-environment/src/index.ts index 2d786570f711..bdc833d5e73d 100644 --- a/packages/jest-environment/src/index.ts +++ b/packages/jest-environment/src/index.ts @@ -29,7 +29,6 @@ export type ModuleWrapper = ( require: Module['require'], __dirname: string, __filename: Module['filename'], - global: Global.Global, jest?: Jest, ...extraGlobals: Array ) => unknown; diff --git a/packages/jest-runtime/src/__tests__/__snapshots__/runtime_wrap.js.snap b/packages/jest-runtime/src/__tests__/__snapshots__/runtime_wrap.js.snap index fd65bf149b33..31e19b94d748 100644 --- a/packages/jest-runtime/src/__tests__/__snapshots__/runtime_wrap.js.snap +++ b/packages/jest-runtime/src/__tests__/__snapshots__/runtime_wrap.js.snap @@ -1,11 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Runtime wrapCodeInModuleWrapper generates the correct args for the module wrapper 1`] = ` -({"Object.":function(module,exports,require,__dirname,__filename,global,jest){module.exports = "Hello!" +({"Object.":function(module,exports,require,__dirname,__filename,jest){module.exports = "Hello!" }}); `; exports[`Runtime wrapCodeInModuleWrapper injects "extra globals" 1`] = ` -({"Object.":function(module,exports,require,__dirname,__filename,global,jest,Math){module.exports = "Hello!" +({"Object.":function(module,exports,require,__dirname,__filename,jest,Math){module.exports = "Hello!" }}); `; diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 09eb75d3c82a..8f4b830af5b1 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -383,7 +383,7 @@ class Runtime { invariant(context); if (this._resolver.isCoreModule(modulePath)) { - const core = await this._importCoreModule(modulePath, context); + const core = this._importCoreModule(modulePath, context); this._esmoduleRegistry.set(cacheKey, core); return core; } @@ -1123,7 +1123,6 @@ class Runtime { module.require, // require implementation module.path, // __dirname module.filename, // __filename - this._environment.global, // global object // @ts-expect-error ...lastArgs.filter(notEmpty), ); @@ -1678,7 +1677,6 @@ class Runtime { 'require', '__dirname', '__filename', - 'global', this._config.injectGlobals ? 'jest' : undefined, ...this._config.extraGlobals, ].filter(notEmpty);