[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

refactor: `@vitest/browser` to not contain V8 coverage logic (#10808)

authored by

Ari Perkkiö and committed by
GitHub
(Jul 21, 2026, 2:18 PM +0300) 0f8e63f5 61585cc9

+32 -19
-16
packages/browser/src/node/commands/coverage.ts
··· 1 - import type { BrowserCommand } from 'vitest/node' 2 - import type { BrowserServerCDPHandler } from '../cdp' 3 - 4 - export const _startV8Coverage: BrowserCommand<[]> = async (context) => { 5 - const session: BrowserServerCDPHandler = await context.__ensureCDPHandler() 6 - await session.send('Profiler.enable') 7 - await session.send('Profiler.startPreciseCoverage', { 8 - callCount: true, 9 - detailed: true, 10 - }) 11 - } 12 - 13 - export const _takeV8Coverage: BrowserCommand<[]> = async (context) => { 14 - const session: BrowserServerCDPHandler = await context.__ensureCDPHandler() 15 - return session.send('Profiler.takePreciseCoverage') 16 - }
-3
packages/browser/src/node/commands/index.ts
··· 1 - import { _startV8Coverage, _takeV8Coverage } from './coverage' 2 1 import { 3 2 _fileInfo, 4 3 readFile, ··· 14 13 removeFile: removeFile as typeof removeFile, 15 14 writeFile: writeFile as typeof writeFile, 16 15 // private commands 17 - __vitest_startV8Coverage: _startV8Coverage as typeof _startV8Coverage, 18 - __vitest_takeV8Coverage: _takeV8Coverage as typeof _takeV8Coverage, 19 16 __vitest_markTrace: _markTrace as typeof _markTrace, 20 17 __vitest_groupTraceStart: _groupTraceStart as typeof _groupTraceStart, 21 18 __vitest_groupTraceEnd: _groupTraceEnd as typeof _groupTraceEnd,
+21
packages/coverage-v8/src/commands.ts
··· 1 + import type { CDPSession } from '@vitest/browser-playwright' 2 + import type { BrowserCommand, BrowserCommandContext } from 'vitest/node' 3 + 4 + export const commands: Record<string, BrowserCommand> = { 5 + startV8Coverage, 6 + takeV8Coverage, 7 + } 8 + 9 + async function startV8Coverage(context: BrowserCommandContext): Promise<void> { 10 + const session: CDPSession = await context.__ensureCDPHandler() 11 + await session.send('Profiler.enable') 12 + await session.send('Profiler.startPreciseCoverage', { 13 + callCount: true, 14 + detailed: true, 15 + }) 16 + } 17 + 18 + async function takeV8Coverage(context: BrowserCommandContext): Promise<any> { 19 + const session: CDPSession = await context.__ensureCDPHandler() 20 + return session.send('Profiler.takePreciseCoverage') 21 + }
+9
packages/coverage-v8/src/provider.ts
··· 17 17 import c from 'tinyrainbow' 18 18 import { BaseCoverageProvider, parseAstAsync } from 'vitest/node' 19 19 import { version } from '../package.json' with { type: 'json' } 20 + import { commands } from './commands' 20 21 21 22 export interface ScriptCoverageWithOffset extends Profiler.ScriptCoverage { 22 23 startOffset: number ··· 37 38 38 39 initialize(ctx: Vitest): void { 39 40 this._initialize(ctx) 41 + 42 + for (const project of ctx.projects) { 43 + if (project.isBrowserEnabled() && project.browser) { 44 + for (const [name, command] of Object.entries(commands)) { 45 + project.browser.registerCommand(`__vitest_${name}` as any, command) 46 + } 47 + } 48 + } 40 49 41 50 if (this.options.autoAttachSubprocess) { 42 51 const isAnyThreadsPools = ctx.projects.some(p => p.config.pool === 'threads' || p.config.pool === 'vmThreads')
+1
test/coverage-test/test/custom-provider.custom.test.ts
··· 5 5 test('custom provider', async () => { 6 6 await runVitest({ 7 7 include: ['fixtures/test/math.test.ts', 'fixtures/test/even.test.ts'], 8 + fsModuleCache: false, 8 9 }) 9 10 10 11 const report = readFileSync('./coverage/custom-coverage-provider-report.json', 'utf-8')
+1
test/coverage-test/test/mixed-versions-warning.unit.test.ts
··· 16 16 logger: { warn }, 17 17 config: configDefaults, 18 18 _coverageOptions: configDefaults.coverage, 19 + projects: [], 19 20 } as any) 20 21 21 22 expect(warn).toHaveBeenCalled()