diff --git a/packages/browser/src/client/runner.ts b/packages/browser/src/client/runner.ts index f316715a541d..2f762ff61159 100644 --- a/packages/browser/src/client/runner.ts +++ b/packages/browser/src/client/runner.ts @@ -92,11 +92,12 @@ export async function initiateRunner() { if (cachedRunner) return cachedRunner const config = getConfig() - const [{ VitestTestRunner }, { takeCoverageInsideWorker, loadDiffConfig, loadSnapshotSerializers }] = await Promise.all([ + const [{ VitestTestRunner, NodeBenchmarkRunner }, { takeCoverageInsideWorker, loadDiffConfig, loadSnapshotSerializers }] = await Promise.all([ importId('vitest/runners') as Promise, importId('vitest/browser') as Promise, ]) - const BrowserRunner = createBrowserRunner(VitestTestRunner, { + const runnerClass = config.mode === 'test' ? VitestTestRunner : NodeBenchmarkRunner + const BrowserRunner = createBrowserRunner(runnerClass, { takeCoverage: () => takeCoverageInsideWorker(config.coverage, { executeId: importId }), }) if (!config.snapshotOptions.snapshotEnvironment) diff --git a/test/benchmark/fixtures/basic/only.bench.ts b/test/benchmark/fixtures/basic/only.bench.ts index 0ecd4faa688e..b0647b319292 100644 --- a/test/benchmark/fixtures/basic/only.bench.ts +++ b/test/benchmark/fixtures/basic/only.bench.ts @@ -1,5 +1,4 @@ -import assert from 'node:assert' -import { bench, describe, expect } from 'vitest' +import { bench, describe, expect, assert } from 'vitest' const run = [false, false, false, false, false] diff --git a/test/browser/fixtures/benchmark/basic.bench.ts b/test/browser/fixtures/benchmark/basic.bench.ts new file mode 100644 index 000000000000..d61e094276bd --- /dev/null +++ b/test/browser/fixtures/benchmark/basic.bench.ts @@ -0,0 +1,32 @@ +import { bench, describe } from 'vitest' + +describe('suite-a', () => { + bench('good', async () => { + await sleep(10) + }, options) + + bench('bad', async () => { + await sleep(300) + }, 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: 2, + warmupIterations: 0, + warmupTime: 0, +} diff --git a/test/browser/fixtures/benchmark/vitest.config.ts b/test/browser/fixtures/benchmark/vitest.config.ts new file mode 100644 index 000000000000..2214155ca2c6 --- /dev/null +++ b/test/browser/fixtures/benchmark/vitest.config.ts @@ -0,0 +1,17 @@ +import { fileURLToPath } from 'node:url' +import { defineConfig } from 'vitest/config' + +const provider = process.env.PROVIDER || 'playwright' +const name = + process.env.BROWSER || (provider === 'playwright' ? 'chromium' : 'chrome') + +export default defineConfig({ + test: { + browser: { + enabled: true, + provider, + name, + }, + }, + cacheDir: fileURLToPath(new URL("./node_modules/.vite", import.meta.url)), +}) diff --git a/test/browser/specs/benchmark.test.ts b/test/browser/specs/benchmark.test.ts new file mode 100644 index 000000000000..9f3659e35030 --- /dev/null +++ b/test/browser/specs/benchmark.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from 'vitest' +import { runVitest } from '../../test-utils' + +test('benchmark', async () => { + const result = await runVitest({ root: 'fixtures/benchmark' }, [], 'benchmark') + expect(result.stdout).toContain('✓ basic.bench.ts > suite-a') + expect(result.exitCode).toBe(0) +})