···22import type { FixtureItem } from '../fixture'
33import type { ChainableFunction } from '../utils/chain'
4455-export type RunMode = 'run' | 'skip' | 'only' | 'todo'
55+export type RunMode = 'run' | 'skip' | 'only' | 'todo' | 'queued'
66export type TaskState = RunMode | 'pass' | 'fail'
7788export interface TaskBase {
···2323 * - **only**: only this task and other tasks with `only` mode will run
2424 * - **todo**: task is marked as a todo, alias for `skip`
2525 * - **run**: task will run or already ran
2626+ * - **queued**: task will start running next. It can only exist on the File
2627 */
2728 mode: RunMode
2829 /**
+4-4
packages/runner/src/utils/collect.ts
···7272 })
73737474 // if all subtasks are skipped, mark as skip
7575- if (suite.mode === 'run') {
7676- if (suite.tasks.length && suite.tasks.every(i => i.mode !== 'run')) {
7575+ if (suite.mode === 'run' || suite.mode === 'queued') {
7676+ if (suite.tasks.length && suite.tasks.every(i => i.mode !== 'run' && i.mode !== 'queued')) {
7777 suite.mode = 'skip'
7878 }
7979 }
···115115116116function skipAllTasks(suite: Suite) {
117117 suite.tasks.forEach((t) => {
118118- if (t.mode === 'run') {
118118+ if (t.mode === 'run' || t.mode === 'queued') {
119119 t.mode = 'skip'
120120 if (t.type === 'suite') {
121121 skipAllTasks(t)
···172172 id: generateFileHash(path, projectName),
173173 name: path,
174174 type: 'suite',
175175- mode: 'run',
175175+ mode: 'queued',
176176 filepath,
177177 tasks: [],
178178 meta: Object.create(null),
+2-2
packages/vitest/src/typecheck/collect.ts
···11-import type { File, Suite, Test } from '@vitest/runner'
11+import type { File, RunMode, Suite, Test } from '@vitest/runner'
22import type { Node } from 'estree'
33import type { RawSourceMap } from 'vite-node'
44import type { TestProject } from '../node/project'
···3232 end: number
3333 name: string
3434 type: 'suite' | 'test'
3535- mode: 'run' | 'skip' | 'only' | 'todo'
3535+ mode: RunMode
3636 task: ParsedSuite | ParsedFile | ParsedTest
3737}
3838
+1-1
packages/vitest/src/typecheck/typechecker.ts
···112112 if ('tasks' in task) {
113113 markTasks(task.tasks)
114114 }
115115- if (!task.result?.state && task.mode === 'run') {
115115+ if (!task.result?.state && (task.mode === 'run' || task.mode === 'queued')) {
116116 task.result = {
117117 state: 'pass',
118118 }