From 9ed93b56752033409c4146c5e1a69c0d94281830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Fri, 13 Dec 2024 16:45:35 +0200 Subject: [PATCH] fix(benchmark): prevent runner reporting passed tests twice --- .../src/node/reporters/benchmark/reporter.ts | 18 +++++++++++++++++- .../vitest/src/runtime/runners/benchmark.ts | 10 ---------- test/benchmark/test/basic.test.ts | 1 + 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/vitest/src/node/reporters/benchmark/reporter.ts b/packages/vitest/src/node/reporters/benchmark/reporter.ts index 63b4009a151cc..c45ce890641bb 100644 --- a/packages/vitest/src/node/reporters/benchmark/reporter.ts +++ b/packages/vitest/src/node/reporters/benchmark/reporter.ts @@ -1,4 +1,4 @@ -import type { Task } from '@vitest/runner' +import type { Task, TaskResultPack } from '@vitest/runner' import type { Vitest } from '../../core' import fs from 'node:fs' import { getFullName } from '@vitest/runner/utils' @@ -31,6 +31,22 @@ export class BenchmarkReporter extends DefaultReporter { } } + onTaskUpdate(packs: TaskResultPack[]): void { + for (const pack of packs) { + const task = this.ctx.state.idMap.get(pack[0]) + + if (task?.type === 'suite' && task.result?.state !== 'run') { + task.tasks.filter(task => task.result?.benchmark) + .sort((benchA, benchB) => benchA.result!.benchmark!.mean - benchB.result!.benchmark!.mean) + .forEach((bench, idx) => { + bench.result!.benchmark!.rank = Number(idx) + 1 + }) + } + } + + super.onTaskUpdate(packs) + } + printTask(task: Task) { if (task?.type !== 'suite' || !task.result?.state || task.result?.state === 'run') { return diff --git a/packages/vitest/src/runtime/runners/benchmark.ts b/packages/vitest/src/runtime/runners/benchmark.ts index 10d0857536ade..00e5b688436bc 100644 --- a/packages/vitest/src/runtime/runners/benchmark.ts +++ b/packages/vitest/src/runtime/runners/benchmark.ts @@ -137,16 +137,6 @@ async function runBenchmarkSuite(suite: Suite, runner: NodeBenchmarkRunner) { suite.result!.duration = performance.now() - start suite.result!.state = 'pass' - tasks - .sort(([taskA], [taskB]) => taskA.result!.mean - taskB.result!.mean) - .forEach(([, benchmark], idx) => { - benchmark.result!.state = 'pass' - if (benchmark) { - const result = benchmark.result!.benchmark! - result.rank = Number(idx) + 1 - updateTask(benchmark) - } - }) updateTask(suite) defer.resolve(null) diff --git a/test/benchmark/test/basic.test.ts b/test/benchmark/test/basic.test.ts index 8b9af6c0777f0..86b4eee0a6da5 100644 --- a/test/benchmark/test/basic.test.ts +++ b/test/benchmark/test/basic.test.ts @@ -17,6 +17,7 @@ it('basic', { timeout: 60_000 }, async () => { // Verify that type testing cannot be used with benchmark typecheck: { enabled: true }, }, [], 'benchmark') + expect(result.stderr).toBe('') expect(result.exitCode).toBe(0) const benchResult = await fs.promises.readFile(benchFile, 'utf-8')