diff --git a/packages/utils/src/instrument.ts b/packages/utils/src/instrument.ts index 157fe8a50c0b..f3364ba92b9c 100644 --- a/packages/utils/src/instrument.ts +++ b/packages/utils/src/instrument.ts @@ -247,8 +247,9 @@ export function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: str } /** JSDoc */ -function instrumentXHR(): void { - if (!('XMLHttpRequest' in WINDOW)) { +export function instrumentXHR(): void { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!(WINDOW as any).XMLHttpRequest) { return; } @@ -539,8 +540,8 @@ type InstrumentedElement = Element & { }; /** JSDoc */ -function instrumentDOM(): void { - if (!('document' in WINDOW)) { +export function instrumentDOM(): void { + if (!WINDOW.document) { return; } diff --git a/packages/utils/test/instrument.test.ts b/packages/utils/test/instrument.test.ts index f9088ca1257a..f1ec46b93fb1 100644 --- a/packages/utils/test/instrument.test.ts +++ b/packages/utils/test/instrument.test.ts @@ -1,6 +1,22 @@ -import { parseFetchArgs } from '../src/instrument'; +import { instrumentDOM, instrumentXHR, parseFetchArgs } from '../src/instrument'; + +jest.mock('../src/worldwide', () => ({ + // Return an empty object with undefined properties + getGlobalObject: () => ({ + document: undefined, + XMLHttpRequest: undefined, + }), +})); describe('instrument', () => { + it('instrumentXHR() does not throw if XMLHttpRequest is a key on window but not defined', () => { + expect(instrumentXHR).not.toThrow(); + }); + + it('instrumentDOM() does not throw if XMLHttpRequest is a key on window but not defined', () => { + expect(instrumentDOM).not.toThrow(); + }); + describe('parseFetchArgs', () => { it.each([ ['string URL only', ['http://example.com'], { method: 'GET', url: 'http://example.com' }],