Skip to content

Commit 62260c1

Browse files
committed
fix(coverage): isolate: false with v8 provider
1 parent 021944c commit 62260c1

File tree

5 files changed

+30
-19
lines changed

5 files changed

+30
-19
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
@@ -24,8 +24,12 @@ export async function run(
2424
): Promise<void> {
2525
const workerState = getWorkerState()
2626

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

3034
if (config.chaiConfig) {
3135
setupChaiConfig(config.chaiConfig)
@@ -49,14 +53,7 @@ export async function run(
4953
= performance.now() - workerState.durations.environment
5054

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

79-
await stopCoverageInsideWorker(config.coverage, executor)
76+
await stopCoverageInsideWorker(config.coverage, executor, { isolate })
8077
},
8178
)
8279

0 commit comments

Comments
 (0)