diff --git a/packages/vitest/src/node/reporters/verbose.ts b/packages/vitest/src/node/reporters/verbose.ts index dd17b8d4b0f2..9d157d21223b 100644 --- a/packages/vitest/src/node/reporters/verbose.ts +++ b/packages/vitest/src/node/reporters/verbose.ts @@ -21,6 +21,8 @@ export class VerboseReporter extends DefaultReporter { if (task.suite?.projectName) title += formatProjectName(task.suite.projectName) title += getFullName(task, c.dim(' > ')) + if (task.result.duration != null && task.result.duration > this.ctx.config.slowTestThreshold) + title += c.yellow(` ${Math.round(task.result.duration)}${c.dim('ms')}`) if (this.ctx.config.logHeapUsage && task.result.heap != null) title += c.magenta(` ${Math.floor(task.result.heap / 1024 / 1024)} MB heap used`) this.ctx.logger.log(title) diff --git a/test/reporters/fixtures/duration/basic.test.ts b/test/reporters/fixtures/duration/basic.test.ts new file mode 100644 index 000000000000..bf9736b7ad7a --- /dev/null +++ b/test/reporters/fixtures/duration/basic.test.ts @@ -0,0 +1,11 @@ +import { test } from 'vitest'; + +test('fast', async () => { + await sleep(10) +}); + +test('slow', async () => { + await sleep(200) +}); + +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) diff --git a/test/reporters/fixtures/duration/vitest.config.ts b/test/reporters/fixtures/duration/vitest.config.ts new file mode 100644 index 000000000000..74bde96c0da3 --- /dev/null +++ b/test/reporters/fixtures/duration/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + slowTestThreshold: 100 + } +}) diff --git a/test/reporters/tests/verbose.test.ts b/test/reporters/tests/verbose.test.ts new file mode 100644 index 000000000000..57634464ffd6 --- /dev/null +++ b/test/reporters/tests/verbose.test.ts @@ -0,0 +1,11 @@ +import { expect, test } from 'vitest' +import { runVitestCli } from '../../test-utils' + +test('duration', async () => { + const result = await runVitestCli({ env: { CI: '1' } }, '--root=fixtures/duration', '--reporter=verbose') + const output = result.stdout.replaceAll(/\d+ms/g, '[...]ms') + expect(output).toContain(` + ✓ basic.test.ts > fast + ✓ basic.test.ts > slow [...]ms +`) +})