From db98145f4f6426b45ba8682f23fca6944ae311bd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 5 Apr 2024 20:00:28 +0900 Subject: [PATCH] fix(benchmark): fix benchmark summary of single bench suite (#5489) --- packages/vitest/src/node/reporters/base.ts | 6 +++- .../fixtures/reporter/summary.bench.ts | 32 +++++++++++++++++++ .../fixtures/reporter/vitest.config.ts | 3 ++ .../test/__snapshots__/reporter.test.ts.snap | 14 ++++++++ test/benchmark/test/reporter.test.ts | 10 ++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 test/benchmark/fixtures/reporter/summary.bench.ts create mode 100644 test/benchmark/fixtures/reporter/vitest.config.ts create mode 100644 test/benchmark/test/__snapshots__/reporter.test.ts.snap create mode 100644 test/benchmark/test/reporter.test.ts diff --git a/packages/vitest/src/node/reporters/base.ts b/packages/vitest/src/node/reporters/base.ts index bde767865e39..f1b149b76378 100644 --- a/packages/vitest/src/node/reporters/base.ts +++ b/packages/vitest/src/node/reporters/base.ts @@ -328,8 +328,12 @@ export abstract class BaseReporter implements Reporter { const groupName = getFullName(group, c.dim(' > ')) logger.log(` ${bench.name}${c.dim(` - ${groupName}`)}`) const siblings = group.tasks - .filter(i => i.result?.benchmark && i !== bench) + .filter(i => i.meta.benchmark && i.result?.benchmark && i !== bench) .sort((a, b) => a.result!.benchmark!.rank - b.result!.benchmark!.rank) + if (siblings.length === 0) { + logger.log('') + continue + } for (const sibling of siblings) { const number = `${(sibling.result!.benchmark!.mean / bench.result!.benchmark!.mean).toFixed(2)}x` logger.log(` ${c.green(number)} ${c.gray('faster than')} ${sibling.name}`) diff --git a/test/benchmark/fixtures/reporter/summary.bench.ts b/test/benchmark/fixtures/reporter/summary.bench.ts new file mode 100644 index 000000000000..332386b00c5a --- /dev/null +++ b/test/benchmark/fixtures/reporter/summary.bench.ts @@ -0,0 +1,32 @@ +import { bench, describe } from 'vitest' + +describe('suite-a', () => { + bench('good', async () => { + await sleep(25) + }, options) + + bench('bad', async () => { + await sleep(50) + }, options) +}) + +describe('suite-b', () => { + bench('good', async () => { + await sleep(25) + }, options) + + describe('suite-b-nested', () => { + bench('good', async () => { + await sleep(50) + }, options) + }) +}) + +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); + +const options = { + time: 0, + iterations: 3, + warmupIterations: 0, + warmupTime: 0, +} diff --git a/test/benchmark/fixtures/reporter/vitest.config.ts b/test/benchmark/fixtures/reporter/vitest.config.ts new file mode 100644 index 000000000000..abed6b2116e1 --- /dev/null +++ b/test/benchmark/fixtures/reporter/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({}) diff --git a/test/benchmark/test/__snapshots__/reporter.test.ts.snap b/test/benchmark/test/__snapshots__/reporter.test.ts.snap new file mode 100644 index 000000000000..74cc103fe6e4 --- /dev/null +++ b/test/benchmark/test/__snapshots__/reporter.test.ts.snap @@ -0,0 +1,14 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`summary 1`] = ` +" + + good - summary.bench.ts > suite-a + ?.??x faster than bad + + good - summary.bench.ts > suite-b + + good - summary.bench.ts > suite-b > suite-b-nested + +" +`; diff --git a/test/benchmark/test/reporter.test.ts b/test/benchmark/test/reporter.test.ts new file mode 100644 index 000000000000..60ec650a3dd3 --- /dev/null +++ b/test/benchmark/test/reporter.test.ts @@ -0,0 +1,10 @@ +import { expect, it } from 'vitest' +import * as pathe from 'pathe' +import { runVitest } from '../../test-utils' + +it('summary', async () => { + const root = pathe.join(import.meta.dirname, '../fixtures/reporter') + const result = await runVitest({ root }, ['summary.bench.ts'], 'benchmark') + expect(result.stdout).not.toContain('NaNx') + expect(result.stdout.split('BENCH Summary')[1].replaceAll(/\d/g, '?')).toMatchSnapshot() +})