Skip to content

Commit a84a8e0

Browse files
authored
fix: don't process config file twice (#4077)
1 parent c48fef5 commit a84a8e0

File tree

3 files changed

+27
-34
lines changed

3 files changed

+27
-34
lines changed

packages/vitest/src/integrations/browser/server.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
import { createServer } from 'vite'
2-
import { resolve } from 'pathe'
3-
import { findUp } from 'find-up'
4-
import { configFiles, defaultBrowserPort } from '../../constants'
5-
import type { UserConfig } from '../../types/config'
2+
import { defaultBrowserPort } from '../../constants'
63
import { ensurePackageInstalled } from '../../node/pkg'
74
import { resolveApiServerConfig } from '../../node/config'
85
import { CoverageTransform } from '../../node/plugins/coverageTransform'
96
import type { WorkspaceProject } from '../../node/workspace'
107
import { MocksPlugin } from '../../node/plugins/mocks'
118
import { resolveFsAllow } from '../../node/plugins/utils'
129

13-
export async function createBrowserServer(project: WorkspaceProject, options: UserConfig) {
10+
export async function createBrowserServer(project: WorkspaceProject, configFile: string | undefined) {
1411
const root = project.config.root
1512

1613
await ensurePackageInstalled('@vitest/browser', root)
1714

18-
const configPath = options.config === false
19-
? false
20-
: options.config
21-
? resolve(root, options.config)
22-
: await findUp(configFiles, { cwd: root } as any)
15+
const configPath = typeof configFile === 'string' ? configFile : false
2316

2417
const server = await createServer({
2518
logLevel: 'error',

packages/vitest/src/node/core.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -133,20 +133,15 @@ export class Vitest {
133133

134134
await Promise.all(this._onSetServer.map(fn => fn()))
135135

136-
this.projects = await this.resolveWorkspace(options, cliOptions)
136+
this.projects = await this.resolveWorkspace(cliOptions)
137137

138138
if (this.config.testNamePattern)
139139
this.configOverride.testNamePattern = this.config.testNamePattern
140140
}
141141

142-
private async createCoreWorkspace(options: UserConfig) {
143-
const coreWorkspace = new WorkspaceProject(this.config.root, this)
144-
await coreWorkspace.setServer(options, this.server, {
145-
runner: this.runner,
146-
server: this.vitenode,
147-
})
148-
this.coreWorkspaceProject = coreWorkspace
149-
return coreWorkspace
142+
private async createCoreProject() {
143+
this.coreWorkspaceProject = await WorkspaceProject.createCoreProject(this)
144+
return this.coreWorkspaceProject
150145
}
151146

152147
public getCoreWorkspaceProject(): WorkspaceProject | null {
@@ -161,7 +156,7 @@ export class Vitest {
161156
|| this.projects[0]
162157
}
163158

164-
private async resolveWorkspace(options: UserConfig, cliOptions: UserConfig) {
159+
private async resolveWorkspace(cliOptions: UserConfig) {
165160
const configDir = this.server.config.configFile
166161
? dirname(this.server.config.configFile)
167162
: this.config.root
@@ -171,7 +166,7 @@ export class Vitest {
171166
})
172167

173168
if (!workspaceConfigName)
174-
return [await this.createCoreWorkspace(options)]
169+
return [await this.createCoreProject()]
175170

176171
const workspaceConfigPath = join(configDir, workspaceConfigName)
177172

@@ -259,7 +254,7 @@ export class Vitest {
259254
if (
260255
this.server.config.configFile === workspacePath
261256
)
262-
return this.createCoreWorkspace(options)
257+
return this.createCoreProject()
263258
return initializeProject(workspacePath, this, { workspaceConfigPath, test: cliOverrides })
264259
})
265260

@@ -268,7 +263,7 @@ export class Vitest {
268263
})
269264

270265
if (!projects.length)
271-
return [await this.createCoreWorkspace(options)]
266+
return [await this.createCoreProject()]
272267

273268
const resolvedProjects = await Promise.all(projects)
274269
const names = new Set<string>()

packages/vitest/src/node/workspace.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ import { getBrowserProvider } from '../integrations/browser'
1515
import { isBrowserEnabled, resolveConfig } from './config'
1616
import { WorkspaceVitestPlugin } from './plugins/workspace'
1717

18-
interface InitializeServerOptions {
19-
server?: ViteNodeServer
20-
runner?: ViteNodeRunner
21-
}
22-
2318
interface InitializeProjectOptions extends UserWorkspaceConfig {
2419
workspaceConfigPath: string
2520
extends?: string
@@ -187,20 +182,30 @@ export class WorkspaceProject {
187182
return testFiles
188183
}
189184

190-
async initBrowserServer(options: UserConfig) {
185+
async initBrowserServer(configFile: string | undefined) {
191186
if (!this.isBrowserEnabled())
192187
return
193188
await this.browser?.close()
194-
this.browser = await createBrowserServer(this, options)
189+
this.browser = await createBrowserServer(this, configFile)
190+
}
191+
192+
static async createCoreProject(ctx: Vitest) {
193+
const project = new WorkspaceProject(ctx.config.name || ctx.config.root, ctx)
194+
project.vitenode = ctx.vitenode
195+
project.server = ctx.server
196+
project.runner = ctx.runner
197+
project.config = ctx.config
198+
await project.initBrowserServer(ctx.server.config.configFile)
199+
return project
195200
}
196201

197-
async setServer(options: UserConfig, server: ViteDevServer, params: InitializeServerOptions = {}) {
202+
async setServer(options: UserConfig, server: ViteDevServer) {
198203
this.config = resolveConfig(this.ctx.mode, options, server.config)
199204
this.server = server
200205

201-
this.vitenode = params.server ?? new ViteNodeServer(server, this.config)
206+
this.vitenode = new ViteNodeServer(server, this.config)
202207
const node = this.vitenode
203-
this.runner = params.runner ?? new ViteNodeRunner({
208+
this.runner = new ViteNodeRunner({
204209
root: server.config.root,
205210
base: server.config.base,
206211
fetchModule(id: string) {
@@ -211,7 +216,7 @@ export class WorkspaceProject {
211216
},
212217
})
213218

214-
await this.initBrowserServer(options)
219+
await this.initBrowserServer(this.server.config.configFile)
215220
}
216221

217222
async report<T extends keyof Reporter>(name: T, ...args: ArgumentsType<Reporter[T]>) {

0 commit comments

Comments
 (0)