diff --git a/packages/vitest/src/node/sequencers/BaseSequencer.ts b/packages/vitest/src/node/sequencers/BaseSequencer.ts index c3218dfd6..9ab923062 100644 --- a/packages/vitest/src/node/sequencers/BaseSequencer.ts +++ b/packages/vitest/src/node/sequencers/BaseSequencer.ts @@ -35,6 +35,25 @@ export class BaseSequencer implements TestSequencer { public async sort(files: TestSpecification[]): Promise { const cache = this.ctx.cache return [...files].sort((a, b) => { + // "sequence.groupOrder" is higher priority + const groupOrderDiff = a.project.config.sequence.groupOrder - b.project.config.sequence.groupOrder + if (groupOrderDiff !== 0) { + return groupOrderDiff + } + + // Projects run sequential + if (a.project.name !== b.project.name) { + return a.project.name < b.project.name ? -1 : 1 + } + + // Isolated run first + if (a.project.config.isolate && !b.project.config.isolate) { + return -1 + } + if (!a.project.config.isolate && b.project.config.isolate) { + return 1 + } + const keyA = `${a.project.name}:${relative(this.ctx.config.root, a.moduleId)}` const keyB = `${b.project.name}:${relative(this.ctx.config.root, b.moduleId)}` diff --git a/test/core/test/sequencers.test.ts b/test/core/test/sequencers.test.ts index cb65a9949..b55a16134 100644 --- a/test/core/test/sequencers.test.ts +++ b/test/core/test/sequencers.test.ts @@ -7,7 +7,7 @@ import { TestSpecification } from '../../../packages/vitest/src/node/spec' function buildCtx(config?: Partial) { return { config: { - sequence: {}, + sequence: { groupOrder: 0 }, ...config, }, cache: { @@ -22,6 +22,7 @@ function buildWorkspace() { name: 'test', config: { root: import.meta.dirname, + sequence: { groupOrder: 0 }, }, } as any as TestProject } diff --git a/test/coverage-test/vitest.config.ts b/test/coverage-test/vitest.config.ts index ffbd591eb..7eb15f7f8 100644 --- a/test/coverage-test/vitest.config.ts +++ b/test/coverage-test/vitest.config.ts @@ -19,7 +19,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'v8', color: 'green' }, - sequence: { groupOrder: 1 }, env: { COVERAGE_PROVIDER: 'v8' }, include: [GENERIC_TESTS, V8_TESTS], exclude: [ @@ -37,7 +36,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'istanbul', color: 'magenta' }, - sequence: { groupOrder: 2 }, env: { COVERAGE_PROVIDER: 'istanbul' }, include: [GENERIC_TESTS, ISTANBUL_TESTS], exclude: [ @@ -55,7 +53,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'custom', color: 'yellow' }, - sequence: { groupOrder: 3 }, env: { COVERAGE_PROVIDER: 'custom' }, include: [CUSTOM_TESTS], exclude: [FIXTURES], @@ -67,7 +64,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'istanbul-browser', color: 'blue' }, - sequence: { groupOrder: 4 }, env: { COVERAGE_PROVIDER: 'istanbul', COVERAGE_BROWSER: 'true' }, testTimeout: 15_000, include: [ @@ -99,7 +95,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'v8-browser', color: 'red' }, - sequence: { groupOrder: 5 }, env: { COVERAGE_PROVIDER: 'v8', COVERAGE_BROWSER: 'true' }, testTimeout: 15_000, include: [ @@ -133,7 +128,6 @@ export default defineConfig({ extends: true, test: { name: { label: 'unit', color: 'cyan' }, - sequence: { groupOrder: 6 }, include: [UNIT_TESTS], typecheck: { enabled: true,