|
1 | 1 | import c from 'picocolors' |
| 2 | +import type { TaskResultPack } from '@vitest/runner' |
2 | 3 | import type { UserConsoleLog } from '../../../../types/general' |
3 | 4 | import { BaseReporter } from '../../base' |
4 | | -import { type TableRendererOptions, createTableRenderer } from './tableRender' |
| 5 | +import { getFullName } from '../../../../utils' |
| 6 | +import { getStateSymbol } from '../../renderers/utils' |
| 7 | +import { type TableRendererOptions, createTableRenderer, renderTree } from './tableRender' |
5 | 8 |
|
6 | 9 | export class TableReporter extends BaseReporter { |
7 | 10 | renderer?: ReturnType<typeof createTableRenderer> |
@@ -30,6 +33,25 @@ export class TableReporter extends BaseReporter { |
30 | 33 | } |
31 | 34 | } |
32 | 35 |
|
| 36 | + onTaskUpdate(packs: TaskResultPack[]) { |
| 37 | + if (this.isTTY) |
| 38 | + return |
| 39 | + for (const pack of packs) { |
| 40 | + const task = this.ctx.state.idMap.get(pack[0]) |
| 41 | + if (task && task.type === 'suite' && task.result?.state && task.result?.state !== 'run') { |
| 42 | + // render static table when all benches inside single suite are finished |
| 43 | + const benches = task.tasks.filter(t => t.meta.benchmark) |
| 44 | + if (benches.length > 0 && benches.every(t => t.result?.state !== 'run')) { |
| 45 | + let title = ` ${getStateSymbol(task)} ${getFullName(task, c.dim(' > '))}` |
| 46 | + if (task.result.duration != null && task.result.duration > this.ctx.config.slowTestThreshold) |
| 47 | + title += c.yellow(` ${Math.round(task.result.duration)}${c.dim('ms')}`) |
| 48 | + this.ctx.logger.log(title) |
| 49 | + this.ctx.logger.log(renderTree(benches, this.rendererOptions, 1, true)) |
| 50 | + } |
| 51 | + } |
| 52 | + } |
| 53 | + } |
| 54 | + |
33 | 55 | async onFinished(files = this.ctx.state.getFiles(), errors = this.ctx.state.getUnhandledErrors()) { |
34 | 56 | await this.stopListRender() |
35 | 57 | this.ctx.logger.log() |
|
0 commit comments