diff --git a/packages/vitest/src/integrations/env/jsdom.ts b/packages/vitest/src/integrations/env/jsdom.ts index b37232883..ffa661180 100644 --- a/packages/vitest/src/integrations/env/jsdom.ts +++ b/packages/vitest/src/integrations/env/jsdom.ts @@ -321,8 +321,9 @@ function createCompatUtils(window: DOMWindow): CompatUtils { return nodeFormData }, makeCompatBlob(blob: Blob) { - const buffer = (blob as any)[implSymbol]._buffer - return new NodeBlob_([buffer], { type: blob.type }) + const impl = (blob as any)[implSymbol] + // jsdom 28 renamed `_buffer` to `_bytes` + return new NodeBlob_([impl._bytes ?? impl._buffer], { type: blob.type }) }, } return utils diff --git a/test/unit/test/environments/jsdom.spec.ts b/test/unit/test/environments/jsdom.spec.ts index bac68eea1..b61a0af84 100644 --- a/test/unit/test/environments/jsdom.spec.ts +++ b/test/unit/test/environments/jsdom.spec.ts @@ -182,6 +182,13 @@ describe('FormData', () => { expect(retrievedBlob).toBeInstanceOf(File) }) + + test('keeps Blob bytes when used as a Request body', async () => { + const blob = new Blob(['hello world'], { type: 'text/plain' }) + const request = new Request('http://localhost/', { method: 'POST', body: blob }) + + expect(await request.text()).toBe('hello world') + }) }) test('DOM APIs accept AbortController', () => {