Skip to content

Commit 73e2958

Browse files
committed
fix(coverage): isolate: false with v8 provider
1 parent e59f5d7 commit 73e2958

File tree

7 files changed

+34
-26
lines changed

7 files changed

+34
-26
lines changed

packages/browser/src/client/tester/tester.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ async function executeTests(method: 'run' | 'collect', files: string[]) {
122122
try {
123123
await Promise.all([
124124
setupCommonEnv(config),
125-
startCoverageInsideWorker(config.coverage, executor),
125+
startCoverageInsideWorker(config.coverage, executor, { isolate: config.browser.isolate }),
126126
(async () => {
127127
const VitestIndex = await import('vitest')
128128
Object.defineProperty(window, '__vitest_index__', {
@@ -160,7 +160,7 @@ async function executeTests(method: 'run' | 'collect', files: string[]) {
160160
}, 'Cleanup Error')
161161
}
162162
state.environmentTeardownRun = true
163-
await stopCoverageInsideWorker(config.coverage, executor).catch((error) => {
163+
await stopCoverageInsideWorker(config.coverage, executor, { isolate: config.browser.isolate }).catch((error) => {
164164
client.rpc.onUnhandledError({
165165
name: error.name,
166166
message: error.message,

packages/coverage-v8/src/index.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1+
import type { CoverageProviderModule } from 'vitest/node'
12
import type { V8CoverageProvider } from './provider'
23
import inspector, { type Profiler } from 'node:inspector'
34
import { provider } from 'std-env'
45
import { loadProvider } from './load-provider'
56

67
const session = new inspector.Session()
8+
let enabled = false
9+
10+
export default <CoverageProviderModule>{
11+
startCoverage({ isolate }) {
12+
if (isolate === false && enabled) {
13+
return
14+
}
15+
16+
enabled = true
717

8-
export default {
9-
startCoverage(): void {
1018
session.connect()
1119
session.post('Profiler.enable')
1220
session.post('Profiler.startPreciseCoverage', {
@@ -34,7 +42,11 @@ export default {
3442
})
3543
},
3644

37-
stopCoverage(): void {
45+
stopCoverage({ isolate }) {
46+
if (isolate === false) {
47+
return
48+
}
49+
3850
session.post('Profiler.stopPreciseCoverage')
3951
session.post('Profiler.disable')
4052
session.disconnect()

packages/vitest/src/integrations/coverage.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ export async function getCoverageProvider(
7979
export async function startCoverageInsideWorker(
8080
options: SerializedCoverageConfig | undefined,
8181
loader: Loader,
82+
runtimeOptions: { isolate: boolean },
8283
) {
8384
const coverageModule = await resolveCoverageProviderModule(options, loader)
8485

8586
if (coverageModule) {
86-
return coverageModule.startCoverage?.()
87+
return coverageModule.startCoverage?.(runtimeOptions)
8788
}
8889

8990
return null
@@ -105,11 +106,12 @@ export async function takeCoverageInsideWorker(
105106
export async function stopCoverageInsideWorker(
106107
options: SerializedCoverageConfig | undefined,
107108
loader: Loader,
109+
runtimeOptions: { isolate: boolean },
108110
) {
109111
const coverageModule = await resolveCoverageProviderModule(options, loader)
110112

111113
if (coverageModule) {
112-
return coverageModule.stopCoverage?.()
114+
return coverageModule.stopCoverage?.(runtimeOptions)
113115
}
114116

115117
return null

packages/vitest/src/node/types/coverage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export interface CoverageProviderModule {
6666
/**
6767
* Executed before tests are run in the worker thread.
6868
*/
69-
startCoverage?: () => unknown | Promise<unknown>
69+
startCoverage?: (runtimeOptions: { isolate: boolean }) => unknown | Promise<unknown>
7070

7171
/**
7272
* Executed on after each run in the worker thread. Possible to return a payload passed to the provider
@@ -76,7 +76,7 @@ export interface CoverageProviderModule {
7676
/**
7777
* Executed after all tests have been run in the worker thread.
7878
*/
79-
stopCoverage?: () => unknown | Promise<unknown>
79+
stopCoverage?: (runtimeOptions: { isolate: boolean }) => unknown | Promise<unknown>
8080
}
8181

8282
export type CoverageReporter = keyof ReportOptions | (string & {})

packages/vitest/src/runtime/runBaseTests.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ export async function run(
2525
): Promise<void> {
2626
const workerState = getWorkerState()
2727

28+
const isIsolatedThreads = config.pool === 'threads' && (config.poolOptions?.threads?.isolate ?? true)
29+
const isIsolatedForks = config.pool === 'forks' && (config.poolOptions?.forks?.isolate ?? true)
30+
const isolate = isIsolatedThreads || isIsolatedForks
31+
2832
await setupGlobalEnv(config, environment, executor)
29-
await startCoverageInsideWorker(config.coverage, executor)
33+
await startCoverageInsideWorker(config.coverage, executor, { isolate })
3034

3135
if (config.chaiConfig) {
3236
setupChaiConfig(config.chaiConfig)
@@ -50,14 +54,7 @@ export async function run(
5054
= performance.now() - workerState.durations.environment
5155

5256
for (const file of files) {
53-
const isIsolatedThreads
54-
= config.pool === 'threads'
55-
&& (config.poolOptions?.threads?.isolate ?? true)
56-
const isIsolatedForks
57-
= config.pool === 'forks'
58-
&& (config.poolOptions?.forks?.isolate ?? true)
59-
60-
if (isIsolatedThreads || isIsolatedForks) {
57+
if (isolate) {
6158
executor.mocker.reset()
6259
resetModules(workerState.moduleCache, true)
6360
}
@@ -77,7 +74,7 @@ export async function run(
7774
vi.restoreAllMocks()
7875
}
7976

80-
await stopCoverageInsideWorker(config.coverage, executor)
77+
await stopCoverageInsideWorker(config.coverage, executor, { isolate })
8178
},
8279
)
8380

packages/vitest/src/runtime/runVmTests.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export async function run(
6262
getSourceMap: source => workerState.moduleCache.getSourceMap(source),
6363
})
6464

65-
await startCoverageInsideWorker(config.coverage, executor)
65+
await startCoverageInsideWorker(config.coverage, executor, { isolate: false })
6666

6767
if (config.chaiConfig) {
6868
setupChaiConfig(config.chaiConfig)
@@ -101,7 +101,7 @@ export async function run(
101101
vi.restoreAllMocks()
102102
}
103103

104-
await stopCoverageInsideWorker(config.coverage, executor)
104+
await stopCoverageInsideWorker(config.coverage, executor, { isolate: false })
105105
}
106106

107107
function resolveCss(mod: NodeJS.Module) {

test/coverage-test/test/isolation.test.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import type { WorkspaceSpec } from 'vitest/node'
22
import { expect, test } from 'vitest'
3-
import { isV8Provider, readCoverageMap, runVitest } from '../utils'
3+
import { readCoverageMap, runVitest } from '../utils'
44

55
for (const isolate of [true, false]) {
6-
// TODO: Requires #6736
7-
const fails = isV8Provider() && isolate === false
8-
9-
test(`{ isolate: ${isolate} }`, { fails }, async () => {
6+
test(`{ isolate: ${isolate} }`, async () => {
107
await runVitest({
118
include: ['fixtures/test/isolation-*'],
129
setupFiles: ['fixtures/setup.isolation.ts'],

0 commit comments

Comments
 (0)