diff --git a/packages/vitest/src/runtime/mocker.ts b/packages/vitest/src/runtime/mocker.ts index 4a770fc10bb6..049995703d53 100644 --- a/packages/vitest/src/runtime/mocker.ts +++ b/packages/vitest/src/runtime/mocker.ts @@ -8,6 +8,8 @@ import { spyOn } from '../integrations/spy' import type { MockFactory, PendingSuiteMock } from '../types/mocker' import type { VitestExecutor } from './execute' +const filterPublicKeys = ['__esModule', Symbol.asyncIterator, Symbol.hasInstance, Symbol.isConcatSpreadable, Symbol.iterator, Symbol.match, Symbol.matchAll, Symbol.replace, Symbol.search, Symbol.split, Symbol.species, Symbol.toPrimitive, Symbol.toStringTag, Symbol.unscopables] + class RefTracker { private idMap = new Map() private mockedValueMap = new Map() @@ -139,7 +141,7 @@ export class VitestMocker { return target.then.bind(target) } else if (!(prop in target)) { - if (prop === '__esModule') + if (filterPublicKeys.includes(prop)) return undefined const c = getColors() throw new Error( diff --git a/test/core/test/mocked-public-key.test.ts b/test/core/test/mocked-public-key.test.ts new file mode 100644 index 000000000000..935236701d9c --- /dev/null +++ b/test/core/test/mocked-public-key.test.ts @@ -0,0 +1,15 @@ +import { expect, test, vi } from 'vitest' +import { dynamicImport } from '../src/dynamic-import' + +vi.mock('test', () => { + return { + foo: 'foo', + } +}) + +test('testing toMatchObject for mocking module', async () => { + const result = await dynamicImport('test') + expect(result).toMatchObject({ + foo: 'foo', + }) +})