Skip to content

Commit 83862d4

Browse files
authored
fix: run only the name plugin last, not all config plugins (#8130)
1 parent 4751436 commit 83862d4

File tree

1 file changed

+56
-42
lines changed

1 file changed

+56
-42
lines changed

packages/vitest/src/node/plugins/workspace.ts

Lines changed: 56 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,11 @@ export function WorkspaceVitestPlugin(
3232
) {
3333
return <VitePlugin[]>[
3434
{
35-
name: 'vitest:project',
35+
name: 'vitest:project:name',
3636
enforce: 'post',
37-
options() {
38-
this.meta.watchMode = false
39-
},
4037
config(viteConfig) {
41-
const defines: Record<string, any> = deleteDefineConfig(viteConfig)
42-
4338
const testConfig = viteConfig.test || {}
4439

45-
const root = testConfig.root || viteConfig.root || options.root
46-
4740
let { label: name, color } = typeof testConfig.name === 'string'
4841
? { label: testConfig.name }
4942
: { label: '', ...testConfig.name }
@@ -67,6 +60,56 @@ export function WorkspaceVitestPlugin(
6760
}
6861
}
6962

63+
const isUserBrowserEnabled = viteConfig.test?.browser?.enabled
64+
const isBrowserEnabled = isUserBrowserEnabled ?? (viteConfig.test?.browser && project.vitest._cliOptions.browser?.enabled)
65+
// keep project names to potentially filter it out
66+
const workspaceNames = [name]
67+
const browser = viteConfig.test!.browser || {}
68+
if (isBrowserEnabled && browser.name && !browser.instances?.length) {
69+
// vitest injects `instances` in this case later on
70+
workspaceNames.push(name ? `${name} (${browser.name})` : browser.name)
71+
}
72+
73+
viteConfig.test?.browser?.instances?.forEach((instance) => {
74+
// every instance is a potential project
75+
instance.name ??= name ? `${name} (${instance.browser})` : instance.browser
76+
if (isBrowserEnabled) {
77+
workspaceNames.push(instance.name)
78+
}
79+
})
80+
81+
const filters = project.vitest.config.project
82+
// if there is `--project=...` filter, check if any of the potential projects match
83+
// if projects don't match, we ignore the test project altogether
84+
// if some of them match, they will later be filtered again by `resolveWorkspace`
85+
if (filters.length) {
86+
const hasProject = workspaceNames.some((name) => {
87+
return project.vitest.matchesProjectFilter(name)
88+
})
89+
if (!hasProject) {
90+
throw new VitestFilteredOutProjectError()
91+
}
92+
}
93+
94+
return {
95+
test: {
96+
name: { label: name, color },
97+
},
98+
}
99+
},
100+
},
101+
{
102+
name: 'vitest:project',
103+
enforce: 'pre',
104+
options() {
105+
this.meta.watchMode = false
106+
},
107+
config(viteConfig) {
108+
const defines: Record<string, any> = deleteDefineConfig(viteConfig)
109+
110+
const testConfig = viteConfig.test || {}
111+
const root = testConfig.root || viteConfig.root || options.root
112+
70113
const resolveOptions = getDefaultResolveOptions()
71114
const config: ViteConfig = {
72115
root,
@@ -110,44 +153,11 @@ export function WorkspaceVitestPlugin(
110153
resolve: resolveOptions,
111154
},
112155
},
113-
test: {
114-
name: { label: name, color },
115-
},
156+
test: {},
116157
}
117158

118159
;(config.test as ResolvedConfig).defines = defines
119160

120-
const isUserBrowserEnabled = viteConfig.test?.browser?.enabled
121-
const isBrowserEnabled = isUserBrowserEnabled ?? (viteConfig.test?.browser && project.vitest._cliOptions.browser?.enabled)
122-
// keep project names to potentially filter it out
123-
const workspaceNames = [name]
124-
const browser = viteConfig.test!.browser || {}
125-
if (isBrowserEnabled && browser.name && !browser.instances?.length) {
126-
// vitest injects `instances` in this case later on
127-
workspaceNames.push(name ? `${name} (${browser.name})` : browser.name)
128-
}
129-
130-
viteConfig.test?.browser?.instances?.forEach((instance) => {
131-
// every instance is a potential project
132-
instance.name ??= name ? `${name} (${instance.browser})` : instance.browser
133-
if (isBrowserEnabled) {
134-
workspaceNames.push(instance.name)
135-
}
136-
})
137-
138-
const filters = project.vitest.config.project
139-
// if there is `--project=...` filter, check if any of the potential projects match
140-
// if projects don't match, we ignore the test project altogether
141-
// if some of them match, they will later be filtered again by `resolveWorkspace`
142-
if (filters.length) {
143-
const hasProject = workspaceNames.some((name) => {
144-
return project.vitest.matchesProjectFilter(name)
145-
})
146-
if (!hasProject) {
147-
throw new VitestFilteredOutProjectError()
148-
}
149-
}
150-
151161
const classNameStrategy
152162
= (typeof testConfig.css !== 'boolean'
153163
&& testConfig.css?.modules?.classNameStrategy)
@@ -181,6 +191,10 @@ export function WorkspaceVitestPlugin(
181191

182192
return config
183193
},
194+
},
195+
{
196+
name: 'vitest:project:server',
197+
enforce: 'post',
184198
async configureServer(server) {
185199
const options = deepMerge({}, configDefaults, server.config.test || {})
186200
await project._configureServer(options, server)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy