Skip to content

Commit 0bf5253

Browse files
authoredFeb 5, 2024
fix(vitest): handle function config inside defineWorkspace (#5089)
1 parent 4a821b8 commit 0bf5253

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed
 

‎packages/vitest/src/node/core.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { ViteNodeRunner } from 'vite-node/client'
99
import { SnapshotManager } from '@vitest/snapshot/manager'
1010
import type { CancelReason, File } from '@vitest/runner'
1111
import { ViteNodeServer } from 'vite-node/server'
12+
import type { defineWorkspace } from 'vitest/config'
1213
import type { ArgumentsType, CoverageProvider, OnServerRestartHandler, Reporter, ResolvedConfig, UserConfig, UserWorkspaceConfig, VitestRunMode } from '../types'
1314
import { hasFailed, noop, slash, toArray } from '../utils'
1415
import { getCoverageProvider } from '../integrations/coverage'
@@ -215,7 +216,7 @@ export class Vitest {
215216
return [await this.createCoreProject()]
216217

217218
const workspaceModule = await this.runner.executeFile(workspaceConfigPath) as {
218-
default: (string | UserWorkspaceConfig)[]
219+
default: ReturnType<typeof defineWorkspace>
219220
}
220221

221222
if (!workspaceModule.default || !Array.isArray(workspaceModule.default))
@@ -225,10 +226,20 @@ export class Vitest {
225226
const projectsOptions: UserWorkspaceConfig[] = []
226227

227228
for (const project of workspaceModule.default) {
228-
if (typeof project === 'string')
229+
if (typeof project === 'string') {
229230
workspaceGlobMatches.push(project.replace('<rootDir>', this.config.root))
230-
else
231-
projectsOptions.push(project)
231+
}
232+
else if (typeof project === 'function') {
233+
projectsOptions.push(await project({
234+
command: this.server.config.command,
235+
mode: this.server.config.mode,
236+
isPreview: false,
237+
isSsrBuild: false,
238+
}))
239+
}
240+
else {
241+
projectsOptions.push(await project)
242+
}
232243
}
233244

234245
const globOptions: fg.Options = {

‎test/workspaces/vitest.workspace.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ import type { Plugin } from 'vite'
66
export default defineWorkspace([
77
'space_2',
88
'./space_*/*.config.ts',
9-
{
9+
async () => ({
1010
test: {
1111
name: 'happy-dom',
1212
root: './space_shared',
1313
environment: 'happy-dom',
1414
setupFiles: ['./setup.jsdom.ts'],
1515
},
16-
},
17-
{
16+
}),
17+
Promise.resolve({
1818
test: {
1919
name: 'node',
2020
root: './space_shared',
2121
environment: 'node',
2222
setupFiles: ['./setup.node.ts'],
2323
},
24-
},
24+
}),
2525

2626
// Projects testing pool and poolOptions
2727
{

0 commit comments

Comments
 (0)
Please sign in to comment.