[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: reuse the same environment when `isolate` and `fileParallelism` are false (#8889)

authored by

Vladimir and committed by
GitHub
(Oct 31, 2025, 10:23 AM +0100) 31706dfe 10a06d8c

+34 -51
+3 -3
test/workspaces/globalTest.ts
··· 36 36 37 37 try { 38 38 assert.ok(results.success) 39 - assert.equal(results.numTotalTestSuites, 24) 40 - assert.equal(results.numTotalTests, 29) 41 - assert.equal(results.numPassedTests, 29) 39 + assert.equal(results.numTotalTestSuites, 20) 40 + assert.equal(results.numTotalTests, 25) 41 + assert.equal(results.numPassedTests, 25) 42 42 assert.ok(results.coverageMap) 43 43 44 44 const shared = results.testResults.filter((r: any) => r.name.includes('space_shared/test.spec.ts'))
-4
test/workspaces/vitest.config.ts
··· 52 52 name: 'Threads pool', 53 53 include: [ 54 54 './space-pools/threads.test.ts', 55 - './space-pools/multi-worker.test.ts', 56 55 './space-pools/isolate.test.ts', 57 56 ], 58 57 pool: 'threads', ··· 63 62 name: 'Non-parallel thread pool', 64 63 include: [ 65 64 './space-pools/threads.test.ts', 66 - './space-pools/single-worker.test.ts', 67 65 ], 68 66 pool: 'threads', 69 67 fileParallelism: false, ··· 85 83 name: 'Forks pool', 86 84 include: [ 87 85 './space-pools/forks.test.ts', 88 - './space-pools/multi-worker.test.ts', 89 86 './space-pools/isolate.test.ts', 90 87 ], 91 88 pool: 'forks', ··· 96 93 name: 'Non-parallel fork pool', 97 94 include: [ 98 95 './space-pools/forks.test.ts', 99 - './space-pools/single-worker.test.ts', 100 96 ], 101 97 pool: 'forks', 102 98 fileParallelism: false,
+5 -5
test/config/test/failures.test.ts
··· 70 70 }) 71 71 72 72 test('inspect requires changing pool and singleThread/singleFork', async () => { 73 - const { stderr } = await runVitest({ inspect: true }) 73 + const { stderr } = await runVitest({ inspect: true, maxWorkers: 4 }) 74 74 75 75 expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"') 76 76 }) 77 77 78 78 test('inspect cannot be used with multi-threading', async () => { 79 - const { stderr } = await runVitest({ inspect: true, pool: 'threads', fileParallelism: true }) 79 + const { stderr } = await runVitest({ inspect: true, pool: 'threads', fileParallelism: true, maxWorkers: 4 }) 80 80 81 81 expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"') 82 82 }) 83 83 84 84 test('inspect in browser mode requires no-file-parallelism', async () => { 85 - const { stderr } = await runVitest({ inspect: true, browser: { enabled: true, instances: [{ browser: 'chromium' }], provider: playwright() } }) 85 + const { stderr } = await runVitest({ inspect: true, maxWorkers: 4, browser: { enabled: true, instances: [{ browser: 'chromium' }], provider: playwright() } }) 86 86 87 87 expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"') 88 88 }) 89 89 90 90 test('inspect-brk cannot be used with multi processing', async () => { 91 - const { stderr } = await runVitest({ inspect: true, pool: 'forks', fileParallelism: true }) 91 + const { stderr } = await runVitest({ inspect: true, pool: 'forks', fileParallelism: true, maxWorkers: 4 }) 92 92 93 93 expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"') 94 94 }) 95 95 96 96 test('inspect-brk in browser mode requires no-file-parallelism', async () => { 97 - const { stderr } = await runVitest({ inspectBrk: true, browser: { enabled: true, instances: [{ browser: 'chromium' }], provider: playwright() } }) 97 + const { stderr } = await runVitest({ inspectBrk: true, maxWorkers: 4, browser: { enabled: true, instances: [{ browser: 'chromium' }], provider: playwright() } }) 98 98 99 99 expect(stderr).toMatch('Error: You cannot use --inspect-brk without "--no-file-parallelism"') 100 100 })
+20 -1
test/config/test/pool.test.ts
··· 41 41 test('project level pool options overwrites top-level', async () => { 42 42 const config = await getConfig({ 43 43 pool: 'vmForks', 44 + maxWorkers: 4, 44 45 fileParallelism: true, 45 46 projects: [{ 46 47 extends: true, ··· 49 50 }) 50 51 51 52 expect(config.pool).toBe('vmThreads') 52 - expect(config.fileParallelism).toBe(false) 53 + expect(config.maxWorkers).toBe(1) 53 54 }) 54 55 55 56 test('isolated single worker pool receives single testfile at once', async () => { ··· 70 71 const files = await getConfig<string[]>({ 71 72 maxWorkers: 1, 72 73 isolate: false, 74 + sequence: { sequencer: StableTestFileOrderSorter }, 75 + }, { include: ['print-testfiles.test.ts', 'a.test.ts', 'b.test.ts', 'c.test.ts'] }) 76 + 77 + expect(files.map(normalizeFilename)).toMatchInlineSnapshot(` 78 + [ 79 + "<process-cwd>/fixtures/pool/a.test.ts", 80 + "<process-cwd>/fixtures/pool/b.test.ts", 81 + "<process-cwd>/fixtures/pool/c.test.ts", 82 + "<process-cwd>/fixtures/pool/print-testfiles.test.ts", 83 + ] 84 + `) 85 + }) 86 + 87 + test('non-isolated happy-dom worker pool receives all testfiles at once', async () => { 88 + const files = await getConfig<string[]>({ 89 + fileParallelism: false, 90 + isolate: false, 91 + environment: 'happy-dom', 73 92 sequence: { sequencer: StableTestFileOrderSorter }, 74 93 }, { include: ['print-testfiles.test.ts', 'a.test.ts', 'b.test.ts', 'c.test.ts'] }) 75 94
-15
test/workspaces/space-pools/multi-worker.test.ts
··· 1 - import type { ViteUserConfig } from 'vitest/config' 2 - import { expect, test } from 'vitest' 3 - 4 - test('is multi worker', () => { 5 - // @ts-expect-error -- internal 6 - const config: NonNullable<ViteUserConfig['test']> = globalThis.__vitest_worker__.config 7 - 8 - if (config.pool === 'forks') { 9 - expect(config.fileParallelism).toBe(true) 10 - } 11 - else { 12 - expect(config.pool).toBe('threads') 13 - expect(config.fileParallelism).toBe(true) 14 - } 15 - })
-15
test/workspaces/space-pools/single-worker.test.ts
··· 1 - import type { ViteUserConfig } from 'vitest/config' 2 - import { expect, test } from 'vitest' 3 - 4 - test('is single worker', () => { 5 - // @ts-expect-error -- internal 6 - const config: NonNullable<ViteUserConfig['test']> = globalThis.__vitest_worker__.config 7 - 8 - if (config.pool === 'forks') { 9 - expect(config.fileParallelism).toBe(false) 10 - } 11 - else { 12 - expect(config.pool).toBe('threads') 13 - expect(config.fileParallelism).toBe(false) 14 - } 15 - })
+2 -2
packages/vitest/src/node/pool.ts
··· 391 391 } 392 392 393 393 const order = spec.project.config.sequence.groupOrder 394 + const isolate = spec.project.config.isolate 394 395 395 396 // Files that have disabled parallelism and default groupOrder are set into their own group 396 - if (order === 0 && spec.project.config.fileParallelism === false) { 397 + if (isolate === true && order === 0 && spec.project.config.maxWorkers === 1) { 397 398 return sequential.specs.push([spec]) 398 399 } 399 400 400 401 const maxWorkers = resolveMaxWorkers(spec.project) 401 - const isolate = spec.project.config.isolate 402 402 groups[order] ||= { specs: [], maxWorkers } 403 403 404 404 // Multiple projects with different maxWorkers but same groupOrder
-1
packages/vitest/src/runtime/config.ts
··· 15 15 disableConsoleIntercept: boolean | undefined 16 16 runner: string | undefined 17 17 isolate: boolean 18 - fileParallelism: boolean 19 18 maxWorkers: number 20 19 mode: 'test' | 'benchmark' 21 20 bail: number | undefined
+3 -3
packages/vitest/src/node/config/resolveConfig.ts
··· 212 212 } 213 213 214 214 // run benchmark sequentially by default 215 - resolved.fileParallelism ??= mode !== 'benchmark' 215 + const fileParallelism = options.fileParallelism ?? mode !== 'benchmark' 216 216 217 - if (!resolved.fileParallelism) { 217 + if (!fileParallelism) { 218 218 // ignore user config, parallelism cannot be implemented without limiting workers 219 219 resolved.maxWorkers = 1 220 220 } ··· 227 227 } 228 228 229 229 if (resolved.inspect || resolved.inspectBrk) { 230 - if (resolved.fileParallelism) { 230 + if (resolved.maxWorkers !== 1) { 231 231 const inspectOption = `--inspect${resolved.inspectBrk ? '-brk' : ''}` 232 232 throw new Error( 233 233 `You cannot use ${inspectOption} without "--no-file-parallelism"`,
-1
packages/vitest/src/node/config/serializeConfig.ts
··· 11 11 environmentOptions: config.environmentOptions, 12 12 mode: config.mode, 13 13 isolate: config.isolate, 14 - fileParallelism: config.fileParallelism, 15 14 maxWorkers: config.maxWorkers, 16 15 base: config.base, 17 16 logHeapUsage: config.logHeapUsage,
+1 -1
packages/vitest/src/node/types/config.ts
··· 984 984 | 'bail' 985 985 | 'name' 986 986 | 'vmMemoryLimit' 987 + | 'fileParallelism' 987 988 > { 988 989 mode: VitestRunMode 989 990 ··· 1117 1118 mode?: string 1118 1119 sequencer?: Omit<SequenceOptions, 'sequencer' | 'seed'> 1119 1120 deps?: Omit<DepsOptions, 'moduleDirectories'> 1120 - fileParallelism?: boolean 1121 1121 } 1122 1122 1123 1123 export type ResolvedProjectConfig = Omit<