diff --git a/packages/runner/src/utils/collect.ts b/packages/runner/src/utils/collect.ts index ed47ad67c..fb1a9544e 100644 --- a/packages/runner/src/utils/collect.ts +++ b/packages/runner/src/utils/collect.ts @@ -65,6 +65,9 @@ export function interpretTaskModes( if (t.mode === 'skip') { skipAllTasks(t) } + else if (t.mode === 'todo') { + todoAllTasks(t) + } else { traverseSuite(t, includeTask, hasLocationMatch) } @@ -123,6 +126,16 @@ function skipAllTasks(suite: Suite) { } }) } +function todoAllTasks(suite: Suite) { + suite.tasks.forEach((t) => { + if (t.mode === 'run' || t.mode === 'queued') { + t.mode = 'todo' + if (t.type === 'suite') { + todoAllTasks(t) + } + } + }) +} function checkAllowOnly(task: TaskBase, allowOnly?: boolean) { if (allowOnly) { diff --git a/test/cli/fixtures/reported-tasks/1_first.test.ts b/test/cli/fixtures/reported-tasks/1_first.test.ts index 1c52b5e3e..fe369c923 100644 --- a/test/cli/fixtures/reported-tasks/1_first.test.ts +++ b/test/cli/fixtures/reported-tasks/1_first.test.ts @@ -61,6 +61,14 @@ describe('a group', () => { }) }) +describe.todo('todo group', () => { + it('test inside todo group', () => {}) +}) + +describe.skip('skipped group', () => { + it('test inside skipped group', () => {}) +}) + describe.shuffle('shuffled group', () => { it('runs a test in a shuffled group', () => { expect(1).toBe(1) diff --git a/test/cli/test/reported-tasks.test.ts b/test/cli/test/reported-tasks.test.ts index 2a9b58aa7..02e0df073 100644 --- a/test/cli/test/reported-tasks.test.ts +++ b/test/cli/test/reported-tasks.test.ts @@ -56,22 +56,22 @@ it('correctly reports a file', () => { expect(testModule.location).toBeUndefined() expect(testModule.moduleId).toBe(resolve(root, './1_first.test.ts')) expect(testModule.project).toBe(project) - expect(testModule.children.size).toBe(14) + expect(testModule.children.size).toBe(16) const tests = [...testModule.children.tests()] expect(tests).toHaveLength(11) const deepTests = [...testModule.children.allTests()] - expect(deepTests).toHaveLength(19) + expect(deepTests).toHaveLength(21) - expect([...testModule.children.allTests('skipped')]).toHaveLength(5) - expect([...testModule.children.allTests('passed')]).toHaveLength(9) - expect([...testModule.children.allTests('failed')]).toHaveLength(5) - expect([...testModule.children.allTests('running')]).toHaveLength(0) + expect.soft([...testModule.children.allTests('skipped')]).toHaveLength(7) + expect.soft([...testModule.children.allTests('passed')]).toHaveLength(9) + expect.soft([...testModule.children.allTests('failed')]).toHaveLength(5) + expect.soft([...testModule.children.allTests('running')]).toHaveLength(0) const suites = [...testModule.children.suites()] - expect(suites).toHaveLength(3) + expect(suites).toHaveLength(5) const deepSuites = [...testModule.children.allSuites()] - expect(deepSuites).toHaveLength(4) + expect(deepSuites).toHaveLength(6) const diagnostic = testModule.diagnostic() expect(diagnostic).toBeDefined() @@ -187,6 +187,12 @@ it('correctly reports test assigned options', () => { expect(testOptionTodo.options.mode).toBe('todo') const testModifierTodo = findTest(testModule.children, 'todos a .modifier test') expect(testModifierTodo.options.mode).toBe('todo') + + const testInsideTodoDescribe = findTest(testModule.children, 'test inside todo group') + expect(testInsideTodoDescribe.options.mode).toBe('todo') + + const testInsideSkippedDescribe = findTest(testModule.children, 'test inside skipped group') + expect(testInsideSkippedDescribe.options.mode).toBe('skip') }) it('correctly reports retried tests', () => {