Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions packages/mocker/src/browser/mocker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,17 +114,35 @@ export class ModuleMocker implements TestModuleMocker {
const url = new URL(`/@id/${resolvedId}`, this.getBaseUrl())
const query = url.search ? `${url.search}&t=${now()}` : `?t=${now()}`
const moduleObject = await import(/* @vite-ignore */ `${url.pathname}${query}&mock=${mock.type}${url.hash}`)
return this.mockObject(moduleObject, undefined, mock.type) as T
return this.mockObject(moduleObject, mock.type) as T
}

return import(/* @vite-ignore */ mock.redirect)
}

public mockObject(
object: Record<string | symbol, any>,
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
public mockObject(
object: Record<string | symbol, any>,
mockExports: Record<string | symbol, any> | undefined,
moduleType: 'automock' | 'autospy' = 'automock',
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
public mockObject(
object: Record<string | symbol, any>,
mockExportsOrModuleType?: Record<string | symbol, any> | 'automock' | 'autospy',
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any> {
let mockExports: Record<string | symbol, any> | undefined
if (mockExportsOrModuleType === 'automock' || mockExportsOrModuleType === 'autospy') {
moduleType = mockExportsOrModuleType
mockExports = undefined
}
else {
mockExports = mockExportsOrModuleType
}
moduleType ??= 'automock'
const result = mockObject(
{
globalConstructors: {
Expand Down
2 changes: 1 addition & 1 deletion packages/mocker/src/node/automock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ const __vitest_current_es_module__ = {
__esModule: true,
${allSpecifiers.map(({ name }) => `["${name}"]: ${name},`).join('\n ')}
}
const __vitest_mocked_module__ = globalThis[${globalThisAccessor}].mockObject(__vitest_current_es_module__, undefined, "${mockType}")
const __vitest_mocked_module__ = globalThis[${globalThisAccessor}].mockObject(__vitest_current_es_module__, "${mockType}")
`
const assigning = allSpecifiers
.map(({ name }, index) => {
Expand Down
8 changes: 6 additions & 2 deletions packages/mocker/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,12 @@ export interface TestModuleMocker {
importMock(rawId: string, importer: string): Promise<any>
mockObject(
object: Record<string | symbol, any>,
mockExports?: Record<string | symbol, any>,
behavior?: 'automock' | 'autospy',
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
mockObject(
object: Record<string | symbol, any>,
mockExports: Record<string | symbol, any> | undefined,
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
getMockContext(): ModuleMockContext
reset(): void
Expand Down
24 changes: 21 additions & 3 deletions packages/vitest/src/runtime/moduleRunner/bareModuleMocker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,27 @@ export class BareModuleMocker implements TestModuleMocker {

public mockObject(
object: Record<string | symbol, any>,
mockExports: Record<string | symbol, any> = {},
behavior: 'automock' | 'autospy' = 'automock',
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
public mockObject(
object: Record<string | symbol, any>,
mockExports: Record<string | symbol, any> | undefined,
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any>
public mockObject(
object: Record<string | symbol, any>,
mockExportsOrModuleType?: Record<string | symbol, any> | 'automock' | 'autospy',
moduleType?: 'automock' | 'autospy',
): Record<string | symbol, any> {
let mockExports: Record<string | symbol, any> | undefined
if (mockExportsOrModuleType === 'automock' || mockExportsOrModuleType === 'autospy') {
moduleType = mockExportsOrModuleType
mockExports = undefined
}
else {
mockExports = mockExportsOrModuleType
}
moduleType ??= 'automock'
const createMockInstance = this.spyModule?.createMockInstance
if (!createMockInstance) {
throw this.createError(
Expand All @@ -211,7 +229,7 @@ export class BareModuleMocker implements TestModuleMocker {
{
globalConstructors: this.primitives,
createMockInstance,
type: behavior,
type: moduleType,
},
object,
mockExports,
Expand Down
28 changes: 14 additions & 14 deletions test/core/test/browserAutomocker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export function test() {}
__esModule: true,
["test"]: test,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
export {
__vitest_mocked_0__ as test,
Expand All @@ -37,7 +37,7 @@ export class Test {}
__esModule: true,
["Test"]: Test,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["Test"]
export {
__vitest_mocked_0__ as Test,
Expand All @@ -57,7 +57,7 @@ export default class Test {}
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -75,7 +75,7 @@ export default function test() {}
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -93,7 +93,7 @@ export default someVariable
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -111,7 +111,7 @@ export default 'test'
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -129,7 +129,7 @@ export default null
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -149,7 +149,7 @@ export default test
__esModule: true,
["__vitest_default"]: __vitest_default,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_default"]
export {
__vitest_mocked_0__ as default,
Expand All @@ -175,7 +175,7 @@ export const test3 = function test4() {}
["test2"]: test2,
["test3"]: test3,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
const __vitest_mocked_1__ = __vitest_mocked_module__["test2"]
const __vitest_mocked_2__ = __vitest_mocked_module__["test3"]
Expand Down Expand Up @@ -203,7 +203,7 @@ export const [...rest2] = []
["rest"]: rest,
["rest2"]: rest2,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
const __vitest_mocked_1__ = __vitest_mocked_module__["rest"]
const __vitest_mocked_2__ = __vitest_mocked_module__["rest2"]
Expand All @@ -230,7 +230,7 @@ export const test = 2, test2 = 3, test4 = () => {}, test5 = function() {};
["test4"]: test4,
["test5"]: test5,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
const __vitest_mocked_1__ = __vitest_mocked_module__["test2"]
const __vitest_mocked_2__ = __vitest_mocked_module__["test4"]
Expand Down Expand Up @@ -263,7 +263,7 @@ export const { ...rest2 } = {}
["alias"]: alias,
["rest2"]: rest2,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
const __vitest_mocked_1__ = __vitest_mocked_module__["rest"]
const __vitest_mocked_2__ = __vitest_mocked_module__["alias"]
Expand Down Expand Up @@ -293,7 +293,7 @@ it('correctly parses export specifiers', () => {
["test"]: test,
["test"]: test,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["test"]
const __vitest_mocked_1__ = __vitest_mocked_module__["test"]
const __vitest_mocked_2__ = __vitest_mocked_module__["test"]
Expand Down Expand Up @@ -324,7 +324,7 @@ export { testing as name4 } from './another-module'
["__vitest_imported_2__"]: __vitest_imported_2__,
["__vitest_imported_3__"]: __vitest_imported_3__,
}
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, undefined, "automock")
const __vitest_mocked_module__ = globalThis["__vitest_mocker__"].mockObject(__vitest_current_es_module__, "automock")
const __vitest_mocked_0__ = __vitest_mocked_module__["__vitest_imported_0__"]
const __vitest_mocked_1__ = __vitest_mocked_module__["__vitest_imported_1__"]
const __vitest_mocked_2__ = __vitest_mocked_module__["__vitest_imported_2__"]
Expand Down
Loading