From f3ac8d6b270100c1cad6420c441448482cdaf3a9 Mon Sep 17 00:00:00 2001 From: Nathan Walters Date: Mon, 23 Aug 2021 00:59:30 -0700 Subject: [PATCH] fix: support userAgent option for jsdom environment (#11773) --- CHANGELOG.md | 1 + .../src/__tests__/jsdom_environment.test.ts | 12 ++++++++++++ packages/jest-environment-jsdom/src/index.ts | 8 +++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52d51fc13484..94f6cd20a8c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixes - `[jest-types]` Compat with `@types/node` v16 ([#11645](https://github.com/facebook/jest/pull/11645)) +- `[jest-environment-jsdom]` Add support for `userAgent` option ([#11773](https://github.com/facebook/jest/pull/11773)) - `[jest-environment-node]` Add `Event` and `EventTarget` to node global environment. ([#11705](https://github.com/facebook/jest/issues/11705)) - `[jest-mock]` Fix `spyOn` to use `Object.prototype.hasOwnProperty` [#11721](https://github.com/facebook/jest/pull/11721) - `[jest-resolver]` Add dependency on `jest-haste-map` [#11759](https://github.com/facebook/jest/pull/11759) diff --git a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts index b29e7f48db73..6253fa99eb77 100644 --- a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts +++ b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts @@ -27,4 +27,16 @@ describe('JSDomEnvironment', () => { expect(env.fakeTimersModern).toBeDefined(); }); + + it('should respect userAgent option', () => { + const env = new JSDomEnvironment( + makeProjectConfig({ + testEnvironmentOptions: { + userAgent: 'foo', + }, + }), + ); + + expect(env.dom.window.navigator.userAgent).toEqual('foo'); + }); }); diff --git a/packages/jest-environment-jsdom/src/index.ts b/packages/jest-environment-jsdom/src/index.ts index 0f2de08fc29c..413ac3971a73 100644 --- a/packages/jest-environment-jsdom/src/index.ts +++ b/packages/jest-environment-jsdom/src/index.ts @@ -6,7 +6,7 @@ */ import type {Context} from 'vm'; -import {JSDOM, VirtualConsole} from 'jsdom'; +import {JSDOM, ResourceLoader, VirtualConsole} from 'jsdom'; import type {EnvironmentContext, JestEnvironment} from '@jest/environment'; import {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; import type {Config, Global} from '@jest/types'; @@ -33,6 +33,12 @@ class JSDOMEnvironment implements JestEnvironment { constructor(config: Config.ProjectConfig, options?: EnvironmentContext) { this.dom = new JSDOM('', { pretendToBeVisual: true, + resources: + typeof config.testEnvironmentOptions.userAgent === 'string' + ? new ResourceLoader({ + userAgent: config.testEnvironmentOptions.userAgent, + }) + : undefined, runScripts: 'dangerously', url: config.testURL, virtualConsole: new VirtualConsole().sendTo(options?.console || console),