diff --git a/packages/browser/src/node/commands/coverage.ts b/packages/browser/src/node/commands/coverage.ts deleted file mode 100644 index 1af9c4f1e..000000000 --- a/packages/browser/src/node/commands/coverage.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { BrowserCommand } from 'vitest/node' -import type { BrowserServerCDPHandler } from '../cdp' - -export const _startV8Coverage: BrowserCommand<[]> = async (context) => { - const session: BrowserServerCDPHandler = await context.__ensureCDPHandler() - await session.send('Profiler.enable') - await session.send('Profiler.startPreciseCoverage', { - callCount: true, - detailed: true, - }) -} - -export const _takeV8Coverage: BrowserCommand<[]> = async (context) => { - const session: BrowserServerCDPHandler = await context.__ensureCDPHandler() - return session.send('Profiler.takePreciseCoverage') -} diff --git a/packages/browser/src/node/commands/index.ts b/packages/browser/src/node/commands/index.ts index bcd683961..21bbe8a36 100644 --- a/packages/browser/src/node/commands/index.ts +++ b/packages/browser/src/node/commands/index.ts @@ -1,4 +1,3 @@ -import { _startV8Coverage, _takeV8Coverage } from './coverage' import { _fileInfo, readFile, @@ -14,8 +13,6 @@ export default { removeFile: removeFile as typeof removeFile, writeFile: writeFile as typeof writeFile, // private commands - __vitest_startV8Coverage: _startV8Coverage as typeof _startV8Coverage, - __vitest_takeV8Coverage: _takeV8Coverage as typeof _takeV8Coverage, __vitest_markTrace: _markTrace as typeof _markTrace, __vitest_groupTraceStart: _groupTraceStart as typeof _groupTraceStart, __vitest_groupTraceEnd: _groupTraceEnd as typeof _groupTraceEnd, diff --git a/packages/coverage-v8/src/commands.ts b/packages/coverage-v8/src/commands.ts new file mode 100644 index 000000000..f160d0162 --- /dev/null +++ b/packages/coverage-v8/src/commands.ts @@ -0,0 +1,21 @@ +import type { CDPSession } from '@vitest/browser-playwright' +import type { BrowserCommand, BrowserCommandContext } from 'vitest/node' + +export const commands: Record = { + startV8Coverage, + takeV8Coverage, +} + +async function startV8Coverage(context: BrowserCommandContext): Promise { + const session: CDPSession = await context.__ensureCDPHandler() + await session.send('Profiler.enable') + await session.send('Profiler.startPreciseCoverage', { + callCount: true, + detailed: true, + }) +} + +async function takeV8Coverage(context: BrowserCommandContext): Promise { + const session: CDPSession = await context.__ensureCDPHandler() + return session.send('Profiler.takePreciseCoverage') +} diff --git a/packages/coverage-v8/src/provider.ts b/packages/coverage-v8/src/provider.ts index 950616722..308b96b7f 100644 --- a/packages/coverage-v8/src/provider.ts +++ b/packages/coverage-v8/src/provider.ts @@ -17,6 +17,7 @@ import { provider } from 'std-env' import c from 'tinyrainbow' import { BaseCoverageProvider, parseAstAsync } from 'vitest/node' import { version } from '../package.json' with { type: 'json' } +import { commands } from './commands' export interface ScriptCoverageWithOffset extends Profiler.ScriptCoverage { startOffset: number @@ -38,6 +39,14 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage initialize(ctx: Vitest): void { this._initialize(ctx) + for (const project of ctx.projects) { + if (project.isBrowserEnabled() && project.browser) { + for (const [name, command] of Object.entries(commands)) { + project.browser.registerCommand(`__vitest_${name}` as any, command) + } + } + } + if (this.options.autoAttachSubprocess) { const isAnyThreadsPools = ctx.projects.some(p => p.config.pool === 'threads' || p.config.pool === 'vmThreads') diff --git a/test/coverage-test/test/custom-provider.custom.test.ts b/test/coverage-test/test/custom-provider.custom.test.ts index ee0033ef4..154f43503 100644 --- a/test/coverage-test/test/custom-provider.custom.test.ts +++ b/test/coverage-test/test/custom-provider.custom.test.ts @@ -5,6 +5,7 @@ import { runVitest, test } from '../utils' test('custom provider', async () => { await runVitest({ include: ['fixtures/test/math.test.ts', 'fixtures/test/even.test.ts'], + fsModuleCache: false, }) const report = readFileSync('./coverage/custom-coverage-provider-report.json', 'utf-8') diff --git a/test/coverage-test/test/mixed-versions-warning.unit.test.ts b/test/coverage-test/test/mixed-versions-warning.unit.test.ts index fde3f3a91..a1a3bb34f 100644 --- a/test/coverage-test/test/mixed-versions-warning.unit.test.ts +++ b/test/coverage-test/test/mixed-versions-warning.unit.test.ts @@ -16,6 +16,7 @@ test('v8 provider logs warning if versions do not match', async () => { logger: { warn }, config: configDefaults, _coverageOptions: configDefaults.coverage, + projects: [], } as any) expect(warn).toHaveBeenCalled()