Skip to content

Commit e7f3521

Browse files
authored
fix: move Vitest.setServer to post configureServer hook to enable import analysis for workspace config loading (#6584)
1 parent 891d6fe commit e7f3521

File tree

7 files changed

+73
-44
lines changed

7 files changed

+73
-44
lines changed

packages/ui/node/index.ts

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,41 +22,44 @@ export default (ctx: Vitest): Plugin => {
2222
return <Plugin>{
2323
name: 'vitest:ui',
2424
apply: 'serve',
25-
configureServer(server) {
26-
const uiOptions = ctx.config
27-
const base = uiOptions.uiBase
28-
const coverageFolder = resolveCoverageFolder(ctx)
29-
const coveragePath = coverageFolder ? coverageFolder[1] : undefined
30-
if (coveragePath && base === coveragePath) {
31-
throw new Error(
32-
`The ui base path and the coverage path cannot be the same: ${base}, change coverage.reportsDirectory`,
33-
)
34-
}
25+
configureServer: {
26+
order: 'post',
27+
handler(server) {
28+
const uiOptions = ctx.config
29+
const base = uiOptions.uiBase
30+
const coverageFolder = resolveCoverageFolder(ctx)
31+
const coveragePath = coverageFolder ? coverageFolder[1] : undefined
32+
if (coveragePath && base === coveragePath) {
33+
throw new Error(
34+
`The ui base path and the coverage path cannot be the same: ${base}, change coverage.reportsDirectory`,
35+
)
36+
}
3537

36-
if (coverageFolder) {
38+
if (coverageFolder) {
39+
server.middlewares.use(
40+
coveragePath!,
41+
sirv(coverageFolder[0], {
42+
single: true,
43+
dev: true,
44+
setHeaders: (res) => {
45+
res.setHeader(
46+
'Cache-Control',
47+
'public,max-age=0,must-revalidate',
48+
)
49+
},
50+
}),
51+
)
52+
}
53+
54+
const clientDist = resolve(fileURLToPath(import.meta.url), '../client')
3755
server.middlewares.use(
38-
coveragePath!,
39-
sirv(coverageFolder[0], {
56+
base,
57+
sirv(clientDist, {
4058
single: true,
4159
dev: true,
42-
setHeaders: (res) => {
43-
res.setHeader(
44-
'Cache-Control',
45-
'public,max-age=0,must-revalidate',
46-
)
47-
},
4860
}),
4961
)
50-
}
51-
52-
const clientDist = resolve(fileURLToPath(import.meta.url), '../client')
53-
server.middlewares.use(
54-
base,
55-
sirv(clientDist, {
56-
single: true,
57-
dev: true,
58-
}),
59-
)
62+
},
6063
},
6164
}
6265
}

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -233,22 +233,26 @@ export async function VitestPlugin(
233233

234234
hijackVitePluginInject(viteConfig)
235235
},
236-
async configureServer(server) {
237-
if (options.watch && process.env.VITE_TEST_WATCHER_DEBUG) {
238-
server.watcher.on('ready', () => {
239-
// eslint-disable-next-line no-console
240-
console.log('[debug] watcher is ready')
241-
})
242-
}
243-
await ctx.setServer(options, server, userConfig)
244-
if (options.api && options.watch) {
245-
(await import('../../api/setup')).setup(ctx)
246-
}
236+
configureServer: {
237+
// runs after vite:import-analysis as it relies on `server` instance on Vite 5
238+
order: 'post',
239+
async handler(server) {
240+
if (options.watch && process.env.VITE_TEST_WATCHER_DEBUG) {
241+
server.watcher.on('ready', () => {
242+
// eslint-disable-next-line no-console
243+
console.log('[debug] watcher is ready')
244+
})
245+
}
246+
await ctx.setServer(options, server, userConfig)
247+
if (options.api && options.watch) {
248+
(await import('../../api/setup')).setup(ctx)
249+
}
247250

248-
// #415, in run mode we don't need the watcher, close it would improve the performance
249-
if (!options.watch) {
250-
await server.watcher.close()
251-
}
251+
// #415, in run mode we don't need the watcher, close it would improve the performance
252+
if (!options.watch) {
253+
await server.watcher.close()
254+
}
255+
},
252256
},
253257
},
254258
SsrReplacerPlugin(),
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default [] satisfies string[];
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"name": "a"
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { test } from 'vitest';
2+
3+
test('test - a')
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import depAsJs from "./dep.js"
2+
3+
export default [
4+
"./packages/*",
5+
...depAsJs,
6+
]

test/config/test/workspace.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,12 @@ it('fails if referenced file doesnt exist', async () => {
8181
`Workspace config file "vitest.workspace.ts" references a non-existing file or a directory: ${resolve('fixtures/workspace/invalid-non-existing-config/vitest.config.js')}`,
8282
)
8383
})
84+
85+
it('vite import analysis is applied when loading workspace config', async () => {
86+
const { stderr, stdout } = await runVitest({
87+
root: 'fixtures/workspace/config-import-analysis',
88+
workspace: './fixtures/workspace/config-import-analysis/vitest.workspace.ts',
89+
})
90+
expect(stderr).toBe('')
91+
expect(stdout).toContain('test - a')
92+
})

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