Skip to content

Commit 31706df

Browse files
authored
fix: reuse the same environment when isolate and fileParallelism are false (#8889)
1 parent 10a06d8 commit 31706df

File tree

11 files changed

+34
-51
lines changed

11 files changed

+34
-51
lines changed

packages/vitest/src/node/config/resolveConfig.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,9 @@ export function resolveConfig(
212212
}
213213

214214
// run benchmark sequentially by default
215-
resolved.fileParallelism ??= mode !== 'benchmark'
215+
const fileParallelism = options.fileParallelism ?? mode !== 'benchmark'
216216

217-
if (!resolved.fileParallelism) {
217+
if (!fileParallelism) {
218218
// ignore user config, parallelism cannot be implemented without limiting workers
219219
resolved.maxWorkers = 1
220220
}
@@ -227,7 +227,7 @@ export function resolveConfig(
227227
}
228228

229229
if (resolved.inspect || resolved.inspectBrk) {
230-
if (resolved.fileParallelism) {
230+
if (resolved.maxWorkers !== 1) {
231231
const inspectOption = `--inspect${resolved.inspectBrk ? '-brk' : ''}`
232232
throw new Error(
233233
`You cannot use ${inspectOption} without "--no-file-parallelism"`,

packages/vitest/src/node/config/serializeConfig.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export function serializeConfig(project: TestProject): SerializedConfig {
1111
environmentOptions: config.environmentOptions,
1212
mode: config.mode,
1313
isolate: config.isolate,
14-
fileParallelism: config.fileParallelism,
1514
maxWorkers: config.maxWorkers,
1615
base: config.base,
1716
logHeapUsage: config.logHeapUsage,

packages/vitest/src/node/pool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,14 +391,14 @@ function groupSpecs(specs: TestSpecification[], environments: Awaited<ReturnType
391391
}
392392

393393
const order = spec.project.config.sequence.groupOrder
394+
const isolate = spec.project.config.isolate
394395

395396
// 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) {
397398
return sequential.specs.push([spec])
398399
}
399400

400401
const maxWorkers = resolveMaxWorkers(spec.project)
401-
const isolate = spec.project.config.isolate
402402
groups[order] ||= { specs: [], maxWorkers }
403403

404404
// Multiple projects with different maxWorkers but same groupOrder

packages/vitest/src/node/types/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ export interface ResolvedConfig
984984
| 'bail'
985985
| 'name'
986986
| 'vmMemoryLimit'
987+
| 'fileParallelism'
987988
> {
988989
mode: VitestRunMode
989990

@@ -1117,7 +1118,6 @@ export type ProjectConfig = Omit<
11171118
mode?: string
11181119
sequencer?: Omit<SequenceOptions, 'sequencer' | 'seed'>
11191120
deps?: Omit<DepsOptions, 'moduleDirectories'>
1120-
fileParallelism?: boolean
11211121
}
11221122

11231123
export type ResolvedProjectConfig = Omit<

packages/vitest/src/runtime/config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export interface SerializedConfig {
1515
disableConsoleIntercept: boolean | undefined
1616
runner: string | undefined
1717
isolate: boolean
18-
fileParallelism: boolean
1918
maxWorkers: number
2019
mode: 'test' | 'benchmark'
2120
bail: number | undefined

test/config/test/failures.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,31 +70,31 @@ test('shard count can be smaller than count of test files when passWithNoTests',
7070
})
7171

7272
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 })
7474

7575
expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"')
7676
})
7777

7878
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 })
8080

8181
expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"')
8282
})
8383

8484
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() } })
8686

8787
expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"')
8888
})
8989

9090
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 })
9292

9393
expect(stderr).toMatch('Error: You cannot use --inspect without "--no-file-parallelism"')
9494
})
9595

9696
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() } })
9898

9999
expect(stderr).toMatch('Error: You cannot use --inspect-brk without "--no-file-parallelism"')
100100
})

test/config/test/pool.test.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ test('extended project inherits top-level pool related options', async () => {
4141
test('project level pool options overwrites top-level', async () => {
4242
const config = await getConfig({
4343
pool: 'vmForks',
44+
maxWorkers: 4,
4445
fileParallelism: true,
4546
projects: [{
4647
extends: true,
@@ -49,7 +50,7 @@ test('project level pool options overwrites top-level', async () => {
4950
})
5051

5152
expect(config.pool).toBe('vmThreads')
52-
expect(config.fileParallelism).toBe(false)
53+
expect(config.maxWorkers).toBe(1)
5354
})
5455

5556
test('isolated single worker pool receives single testfile at once', async () => {
@@ -83,6 +84,24 @@ test('non-isolated single worker pool receives all testfiles at once', async ()
8384
`)
8485
})
8586

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',
92+
sequence: { sequencer: StableTestFileOrderSorter },
93+
}, { include: ['print-testfiles.test.ts', 'a.test.ts', 'b.test.ts', 'c.test.ts'] })
94+
95+
expect(files.map(normalizeFilename)).toMatchInlineSnapshot(`
96+
[
97+
"<process-cwd>/fixtures/pool/a.test.ts",
98+
"<process-cwd>/fixtures/pool/b.test.ts",
99+
"<process-cwd>/fixtures/pool/c.test.ts",
100+
"<process-cwd>/fixtures/pool/print-testfiles.test.ts",
101+
]
102+
`)
103+
})
104+
86105
async function getConfig<T = SerializedConfig>(options: Partial<TestUserConfig>, cliOptions: Partial<TestUserConfig> = {}): Promise<T> {
87106
let config: T | undefined
88107

test/workspaces/globalTest.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ export async function teardown() {
3636

3737
try {
3838
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)
4242
assert.ok(results.coverageMap)
4343

4444
const shared = results.testResults.filter((r: any) => r.name.includes('space_shared/test.spec.ts'))

test/workspaces/space-pools/multi-worker.test.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

test/workspaces/space-pools/single-worker.test.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)