diff --git a/packages/vitest/src/integrations/env/utils.ts b/packages/vitest/src/integrations/env/utils.ts index 07e2ff14ecd2..bada94c967c9 100644 --- a/packages/vitest/src/integrations/env/utils.ts +++ b/packages/vitest/src/integrations/env/utils.ts @@ -4,6 +4,7 @@ const allowRewrite = [ 'Event', 'EventTarget', 'MessageEvent', + // implemented in Node 18 'ArrayBuffer', ] @@ -41,7 +42,7 @@ export function populateGlobal(global: any, win: any, options: PopulateOptions = const keys = getWindowKeys(global, win) const originals = new Map( - allowRewrite.map(([key]) => [key, global[key]]), + allowRewrite.filter(key => key in global).map(key => [key, global[key]]), ) const overrideObject = new Map() diff --git a/test/core/test/env-runtime.test.ts b/test/core/test/env-runtime.test.ts new file mode 100644 index 000000000000..44de8b9afb1c --- /dev/null +++ b/test/core/test/env-runtime.test.ts @@ -0,0 +1,15 @@ +import { populateGlobal } from 'vitest/src/integrations/env/utils' +import { expect, test, vi } from 'vitest' + +test('returns valid globals', () => { + const globalEvent = vi.fn() + const winEvent = vi.fn() + const global = { + Event: globalEvent, + } + const win = { Event: winEvent } + const { originals } = populateGlobal(global, win) + expect(originals.get('Event')).toBe(globalEvent) + expect(win.Event).toBe(winEvent) + expect(global.Event).toBe(winEvent) +})