[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix: don't process config file twice (#4077)

authored by

Vladimir and committed by
GitHub
(Sep 6, 2023, 7:35 PM +0300) a84a8e05 c48fef54

+27 -34
+8 -13
packages/vitest/src/node/core.ts
··· 133 133 134 134 await Promise.all(this._onSetServer.map(fn => fn())) 135 135 136 - this.projects = await this.resolveWorkspace(options, cliOptions) 136 + this.projects = await this.resolveWorkspace(cliOptions) 137 137 138 138 if (this.config.testNamePattern) 139 139 this.configOverride.testNamePattern = this.config.testNamePattern 140 140 } 141 141 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 150 145 } 151 146 152 147 public getCoreWorkspaceProject(): WorkspaceProject | null { ··· 161 156 || this.projects[0] 162 157 } 163 158 164 - private async resolveWorkspace(options: UserConfig, cliOptions: UserConfig) { 159 + private async resolveWorkspace(cliOptions: UserConfig) { 165 160 const configDir = this.server.config.configFile 166 161 ? dirname(this.server.config.configFile) 167 162 : this.config.root ··· 171 166 }) 172 167 173 168 if (!workspaceConfigName) 174 - return [await this.createCoreWorkspace(options)] 169 + return [await this.createCoreProject()] 175 170 176 171 const workspaceConfigPath = join(configDir, workspaceConfigName) 177 172 ··· 259 254 if ( 260 255 this.server.config.configFile === workspacePath 261 256 ) 262 - return this.createCoreWorkspace(options) 257 + return this.createCoreProject() 263 258 return initializeProject(workspacePath, this, { workspaceConfigPath, test: cliOverrides }) 264 259 }) 265 260 ··· 268 263 }) 269 264 270 265 if (!projects.length) 271 - return [await this.createCoreWorkspace(options)] 266 + return [await this.createCoreProject()] 272 267 273 268 const resolvedProjects = await Promise.all(projects) 274 269 const names = new Set<string>()
+16 -11
packages/vitest/src/node/workspace.ts
··· 15 15 import { isBrowserEnabled, resolveConfig } from './config' 16 16 import { WorkspaceVitestPlugin } from './plugins/workspace' 17 17 18 - interface InitializeServerOptions { 19 - server?: ViteNodeServer 20 - runner?: ViteNodeRunner 21 - } 22 - 23 18 interface InitializeProjectOptions extends UserWorkspaceConfig { 24 19 workspaceConfigPath: string 25 20 extends?: string ··· 187 182 return testFiles 188 183 } 189 184 190 - async initBrowserServer(options: UserConfig) { 185 + async initBrowserServer(configFile: string | undefined) { 191 186 if (!this.isBrowserEnabled()) 192 187 return 193 188 await this.browser?.close() 194 - this.browser = await createBrowserServer(this, options) 189 + this.browser = await createBrowserServer(this, configFile) 195 190 } 196 191 197 - async setServer(options: UserConfig, server: ViteDevServer, params: InitializeServerOptions = {}) { 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 200 + } 201 + 202 + async setServer(options: UserConfig, server: ViteDevServer) { 198 203 this.config = resolveConfig(this.ctx.mode, options, server.config) 199 204 this.server = server 200 205 201 - this.vitenode = params.server ?? new ViteNodeServer(server, this.config) 206 + this.vitenode = new ViteNodeServer(server, this.config) 202 207 const node = this.vitenode 203 - this.runner = params.runner ?? new ViteNodeRunner({ 208 + this.runner = new ViteNodeRunner({ 204 209 root: server.config.root, 205 210 base: server.config.base, 206 211 fetchModule(id: string) { ··· 211 216 }, 212 217 }) 213 218 214 - await this.initBrowserServer(options) 219 + await this.initBrowserServer(this.server.config.configFile) 215 220 } 216 221 217 222 async report<T extends keyof Reporter>(name: T, ...args: ArgumentsType<Reporter[T]>) {
+3 -10
packages/vitest/src/integrations/browser/server.ts
··· 1 1 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' 6 3 import { ensurePackageInstalled } from '../../node/pkg' 7 4 import { resolveApiServerConfig } from '../../node/config' 8 5 import { CoverageTransform } from '../../node/plugins/coverageTransform' ··· 10 7 import { MocksPlugin } from '../../node/plugins/mocks' 11 8 import { resolveFsAllow } from '../../node/plugins/utils' 12 9 13 - export async function createBrowserServer(project: WorkspaceProject, options: UserConfig) { 10 + export async function createBrowserServer(project: WorkspaceProject, configFile: string | undefined) { 14 11 const root = project.config.root 15 12 16 13 await ensurePackageInstalled('@vitest/browser', root) 17 14 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 23 16 24 17 const server = await createServer({ 25 18 logLevel: 'error',