From f427f0047712bf7719f1a84a69633cc923b63470 Mon Sep 17 00:00:00 2001 From: Han Date: Mon, 19 Jun 2023 16:20:00 +0800 Subject: [PATCH] feat: add `concurrent` option to `sequence` config (#3604) Co-authored-by: Vladimir --- docs/config/index.md | 9 +++++++++ packages/runner/src/suite.ts | 4 ++-- packages/runner/src/types/runner.ts | 1 + packages/vitest/src/node/cli.ts | 2 +- packages/vitest/src/types/config.ts | 6 ++++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/config/index.md b/docs/config/index.md index 432fe7657127..fc30c1895b95 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -1308,6 +1308,15 @@ If you want tests to run randomly, you can enable it with this option, or CLI ar Vitest usually uses cache to sort tests, so long running tests start earlier - this makes tests run faster. If your tests will run in random order you will lose this performance improvement, but it may be useful to track tests that accidentally depend on another run previously. +#### sequence.concurrent + +- **Type**: `boolean` +- **Default**: `false` +- **CLI**: `--sequence.concurrent`, `--sequence.concurrent=false` +- **Version**: Since Vitest 0.32.2 + +If you want tests to run in parallel, you can enable it with this option, or CLI argument [`--sequence.concurrent`](/guide/cli). + #### sequence.seed - **Type**: `number` diff --git a/packages/runner/src/suite.ts b/packages/runner/src/suite.ts index 030a010e8781..787db602930b 100644 --- a/packages/runner/src/suite.ts +++ b/packages/runner/src/suite.ts @@ -31,7 +31,7 @@ export function getRunner() { export function clearCollectorContext(currentRunner: VitestRunner) { if (!defaultSuite) - defaultSuite = currentRunner.config.sequence.shuffle ? suite.shuffle('') : suite('') + defaultSuite = currentRunner.config.sequence.shuffle ? suite.shuffle('') : currentRunner.config.sequence.concurrent ? suite.concurrent('') : suite('') runner = currentRunner collectorContext.tasks.length = 0 defaultSuite.clear() @@ -83,7 +83,7 @@ function createSuiteCollector(name: string, factory: SuiteFactory = () => { }, m meta: Object.create(null), } as Omit as Test - if (this.concurrent || concurrent) + if (this.concurrent || concurrent || runner.config.sequence.concurrent) test.concurrent = true if (shuffle) test.shuffle = true diff --git a/packages/runner/src/types/runner.ts b/packages/runner/src/types/runner.ts index 1f79b96f1f79..6183bb6065fa 100644 --- a/packages/runner/src/types/runner.ts +++ b/packages/runner/src/types/runner.ts @@ -9,6 +9,7 @@ export interface VitestRunnerConfig { allowOnly?: boolean sequence: { shuffle?: boolean + concurrent?: boolean seed: number hooks: SequenceHooks setupFiles: SequenceSetupFiles diff --git a/packages/vitest/src/node/cli.ts b/packages/vitest/src/node/cli.ts index 8a3b6b7557e5..fe18091b547e 100644 --- a/packages/vitest/src/node/cli.ts +++ b/packages/vitest/src/node/cli.ts @@ -41,7 +41,7 @@ cli .option('--dangerouslyIgnoreUnhandledErrors', 'Ignore any unhandled errors that occur') .option('--shard ', 'Test suite shard to execute in a format of /') .option('--changed [since]', 'Run tests that are affected by the changed files (default: false)') - .option('--sequence ', 'Define in what order to run tests (use --sequence.shuffle to run tests in random order)') + .option('--sequence ', 'Define in what order to run tests (use --sequence.shuffle to run tests in random order, use --sequence.concurrent to run tests in parallel)') .option('--segfaultRetry ', 'Return tests on segment fault (default: 0)', { default: 0 }) .option('--no-color', 'Removes colors from the console output') .option('--inspect', 'Enable Node.js inspector') diff --git a/packages/vitest/src/types/config.ts b/packages/vitest/src/types/config.ts index d57bc5a74dc2..040b2d6ccbd9 100644 --- a/packages/vitest/src/types/config.ts +++ b/packages/vitest/src/types/config.ts @@ -48,6 +48,11 @@ interface SequenceOptions { * @default false */ shuffle?: boolean + /** + * Should tests run in parallel. + * @default false + */ + concurrent?: boolean /** * Defines how setup files should be ordered * - 'parallel' will run all setup files in parallel @@ -703,6 +708,7 @@ export interface ResolvedConfig extends Omit, 'config' | 'f hooks: SequenceHooks setupFiles: SequenceSetupFiles shuffle?: boolean + concurrent?: boolean seed: number }