Skip to content

Commit

Permalink
fix(coverage): isolate: false with istanbul provider
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed Nov 19, 2024
1 parent 09c4b53 commit e05960d
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 29 deletions.
65 changes: 40 additions & 25 deletions packages/coverage-istanbul/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,48 @@
import type { CoverageMapData } from 'istanbul-lib-coverage'
import type { IstanbulCoverageProvider } from './provider'
import { COVERAGE_STORE_KEY } from './constants'

export async function getProvider(): Promise<IstanbulCoverageProvider> {
// to not bundle the provider
const providerPath = './provider.js'
const { IstanbulCoverageProvider } = (await import(
/* @vite-ignore */
providerPath
)) as typeof import('./provider')
return new IstanbulCoverageProvider()
}

export function takeCoverage(): any {
// @ts-expect-error -- untyped global
const coverage = globalThis[COVERAGE_STORE_KEY]
export default {
takeCoverage() {
// @ts-expect-error -- untyped global
return globalThis[COVERAGE_STORE_KEY]
},

// Reset coverage map to prevent duplicate results if this is called twice in row
// @ts-expect-error -- untyped global
globalThis[COVERAGE_STORE_KEY] = {}
startCoverage() {
// @ts-expect-error -- untyped global
const coverageMap = globalThis[COVERAGE_STORE_KEY] as CoverageMapData

return coverage
}
// When isolated, there are no previous results
if (!coverageMap) {
return
}

const _default: {
getProvider: () => Promise<IstanbulCoverageProvider>
takeCoverage: () => any
} = {
getProvider,
takeCoverage,
}
for (const filename in coverageMap) {
const branches = coverageMap[filename].b

for (const key in branches) {
branches[key] = branches[key].map(() => 0)
}

export default _default
for (const metric of ['f', 's'] as const) {
const entry = coverageMap[filename][metric]

for (const key in entry) {
entry[key] = 0
}
}
}
},

async getProvider(): Promise<IstanbulCoverageProvider> {
// to not bundle the provider
const providerPath = './provider.js'
const { IstanbulCoverageProvider } = (await import(
/* @vite-ignore */
providerPath
)) as typeof import('./provider')

return new IstanbulCoverageProvider()
},
}
9 changes: 6 additions & 3 deletions test/coverage-test/test/isolation.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import type { WorkspaceSpec } from 'vitest/node'
import { expect } from 'vitest'
import { readCoverageMap, runVitest, test } from '../utils'
import { expect, test } from 'vitest'
import { isV8Provider, readCoverageMap, runVitest } from '../utils'

for (const isolate of [true, false]) {
test(`{ isolate: ${isolate} }`, async () => {
// TODO: Requires #6736
const fails = isV8Provider() && isolate === false

test(`{ isolate: ${isolate} }`, { fails }, async () => {
await runVitest({
include: ['fixtures/test/isolation-*'],
setupFiles: ['fixtures/setup.isolation.ts'],
Expand Down
2 changes: 1 addition & 1 deletion test/coverage-test/vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { defineConfig } from 'vitest/config'

export default defineConfig({
test: {
reporters: 'basic',
reporters: 'verbose',
isolate: false,
poolOptions: {
threads: {
Expand Down

0 comments on commit e05960d

Please sign in to comment.