diff --git a/CHANGELOG.md b/CHANGELOG.md index 60e15e30b962..3d329e7e5e88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixes +- `[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 e9e508f6e49d..319d60d58d78 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),