Skip to content

Commit 4f4062b

Browse files
authored
fix: support userAgent option for jsdom environment (#11773)
1 parent a22ed65 commit 4f4062b

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
### Fixes
88

9+
- `[jest-environment-jsdom]` Add support for `userAgent` option ([#11773](https://github.com/facebook/jest/pull/11773))
910
- `[jest-environment-node]` Add `Event` and `EventTarget` to node global environment. ([#11705](https://github.com/facebook/jest/issues/11705))
1011
- `[jest-mock]` Fix `spyOn` to use `Object.prototype.hasOwnProperty` [#11721](https://github.com/facebook/jest/pull/11721)
1112
- `[jest-resolver]` Add dependency on `jest-haste-map` [#11759](https://github.com/facebook/jest/pull/11759)

packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,16 @@ describe('JSDomEnvironment', () => {
2727

2828
expect(env.fakeTimersModern).toBeDefined();
2929
});
30+
31+
it('should respect userAgent option', () => {
32+
const env = new JSDomEnvironment(
33+
makeProjectConfig({
34+
testEnvironmentOptions: {
35+
userAgent: 'foo',
36+
},
37+
}),
38+
);
39+
40+
expect(env.dom.window.navigator.userAgent).toEqual('foo');
41+
});
3042
});

packages/jest-environment-jsdom/src/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import type {Context} from 'vm';
9-
import {JSDOM, VirtualConsole} from 'jsdom';
9+
import {JSDOM, ResourceLoader, VirtualConsole} from 'jsdom';
1010
import type {EnvironmentContext, JestEnvironment} from '@jest/environment';
1111
import {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers';
1212
import type {Config, Global} from '@jest/types';
@@ -33,6 +33,12 @@ class JSDOMEnvironment implements JestEnvironment {
3333
constructor(config: Config.ProjectConfig, options?: EnvironmentContext) {
3434
this.dom = new JSDOM('<!DOCTYPE html>', {
3535
pretendToBeVisual: true,
36+
resources:
37+
typeof config.testEnvironmentOptions.userAgent === 'string'
38+
? new ResourceLoader({
39+
userAgent: config.testEnvironmentOptions.userAgent,
40+
})
41+
: undefined,
3642
runScripts: 'dangerously',
3743
url: config.testURL,
3844
virtualConsole: new VirtualConsole().sendTo(options?.console || console),

0 commit comments

Comments
 (0)