diff --git a/packages/vitest/src/integrations/env/jsdom.ts b/packages/vitest/src/integrations/env/jsdom.ts index c585ea4237a9..dcf3dbe9253d 100644 --- a/packages/vitest/src/integrations/env/jsdom.ts +++ b/packages/vitest/src/integrations/env/jsdom.ts @@ -232,7 +232,7 @@ export default { } function createCompatRequest(utils: CompatUtils) { - return class Request extends NodeRequest_ { + class Request extends NodeRequest_ { constructor(...args: [input: RequestInfo, init?: RequestInit]) { const [input, init] = args if (init?.body != null) { @@ -254,10 +254,11 @@ function createCompatRequest(utils: CompatUtils) { return instance instanceof NodeRequest_ } } + return Request } function createJSDOMCompatURL(utils: CompatUtils): typeof URL { - return class URL extends NodeURL { + class URL extends NodeURL { static createObjectURL(blob: any): string { if (blob instanceof utils.window.Blob) { const compatBlob = utils.makeCompatBlob(blob) @@ -269,7 +270,8 @@ function createJSDOMCompatURL(utils: CompatUtils): typeof URL { static [Symbol.hasInstance](instance: unknown): boolean { return instance instanceof NodeURL } - } as typeof URL + } + return URL } interface CompatUtils { diff --git a/test/core/test/environments/jsdom.spec.ts b/test/core/test/environments/jsdom.spec.ts index 5caed58f81a6..2dee767ce169 100644 --- a/test/core/test/environments/jsdom.spec.ts +++ b/test/core/test/environments/jsdom.spec.ts @@ -319,6 +319,11 @@ test('URL.createObjectUrl works properly', () => { }).not.toThrow() }) +test('compat classes preserve their .name property', () => { + expect(URL.name).toBe('URL') + expect(Request.name).toBe('Request') +}) + test('jsdom global is exposed', () => { // @ts-expect-error -- jsdom is not exposed in our types because we use a single tsconfig for all const dom = jsdom