diff --git a/packages/coverage-istanbul/src/provider.ts b/packages/coverage-istanbul/src/provider.ts index 2f1c5693e95a..6a980c2e2649 100644 --- a/packages/coverage-istanbul/src/provider.ts +++ b/packages/coverage-istanbul/src/provider.ts @@ -212,37 +212,47 @@ export class IstanbulCoverageProvider extends BaseCoverageProvider implements Co const transform = this.createUncoveredFileTransformer(this.ctx) - for (const [index, filename] of uncoveredFiles.entries()) { - let timeout: ReturnType | undefined - let start: number | undefined + let processed = 0 + for (const chunk of this.toSlices(uncoveredFiles, this.options.processingConcurrency)) { if (debug.enabled) { - start = performance.now() - timeout = setTimeout( - () => debug(c.bgRed(`File "${filename}" is taking longer than 3s`)), - 3_000, - ) - - debug('Uncovered file %d/%d', index, uncoveredFiles.length) + processed += chunk.length + debug('Uncovered files %d/%d', processed, uncoveredFiles.length) } - // Unique key makes sure file is not served from cache - const uncoveredKey = `${cacheKey}-${index}` - await transform(`${filename}?cache=${uncoveredKey}&vitest-uncovered-coverage=true`) - - const fileCoverage = - this.uncoveredFileCoverages.get(uncoveredKey) ?? this.instrumenter.lastFileCoverage() - this.uncoveredFileCoverages.delete(uncoveredKey) - - coverageMap.addFileCoverage(fileCoverage) - - if (debug.enabled) { - clearTimeout(timeout) - - const diff = performance.now() - start! - const color = diff > 500 ? c.bgRed : c.bgGreen - debug(`${color(` ${diff.toFixed()} ms `)} ${filename}`) - } + await Promise.all( + chunk.map(async (filename, index) => { + let timeout: ReturnType | undefined + let start: number | undefined + + if (debug.enabled) { + start = performance.now() + timeout = setTimeout( + () => debug(c.bgRed(`File "${filename}" is taking longer than 3s`)), + 3_000, + ) + } + + // Unique key makes sure file is not served from cache + const uncoveredKey = `${cacheKey}-${index}` + await transform(`${filename}?cache=${uncoveredKey}&vitest-uncovered-coverage=true`) + + const fileCoverage = this.uncoveredFileCoverages.get(uncoveredKey) + this.uncoveredFileCoverages.delete(uncoveredKey) + + if (fileCoverage) { + coverageMap.addFileCoverage(fileCoverage) + } + + if (debug.enabled) { + clearTimeout(timeout) + + const diff = performance.now() - start! + const color = diff > 500 ? c.bgRed : c.bgGreen + debug(`${color(` ${diff.toFixed()} ms `)} ${filename}`) + } + }), + ) } return coverageMap diff --git a/test/coverage-test/fixtures/configs/vitest.config.conditional.ts b/test/coverage-test/fixtures/configs/vitest.config.conditional.ts index cb32533ea286..b6c0f1677ce3 100644 --- a/test/coverage-test/fixtures/configs/vitest.config.conditional.ts +++ b/test/coverage-test/fixtures/configs/vitest.config.conditional.ts @@ -9,10 +9,12 @@ export default defineConfig({ order: 'pre', handler(source) { if (source.includes("fixtures/src/conditional")) { + const params = source.split("?").pop() + if (this.environment.config.consumer === 'server') { - return resolve('fixtures/src/conditional/ssr.ts') + return resolve('fixtures/src/conditional/ssr.ts') + "?" + params } - return resolve('fixtures/src/conditional/web.ts') + return resolve('fixtures/src/conditional/web.ts') + "?" + params } } },