@@ -393,7 +393,7 @@ export class Vitest {
393
393
if ( this . reporters . some ( r => r instanceof BlobReporter ) )
394
394
throw new Error ( 'Cannot merge reports when `--reporter=blob` is used. Remove blob reporter from the config first.' )
395
395
396
- const { files, errors } = await readBlobs ( this . config . mergeReports , this . projects )
396
+ const { files, errors, coverages } = await readBlobs ( this . config . mergeReports , this . projects )
397
397
398
398
await this . report ( 'onInit' , this )
399
399
await this . report ( 'onPathsCollected' , files . flatMap ( f => f . filepath ) )
@@ -439,6 +439,8 @@ export class Vitest {
439
439
process . exitCode = 1
440
440
441
441
await this . report ( 'onFinished' , files , errors )
442
+ await this . initCoverageProvider ( )
443
+ await this . coverageProvider ?. mergeReports ?.( coverages )
442
444
}
443
445
444
446
async start ( filters ?: string [ ] ) {
@@ -459,7 +461,9 @@ export class Vitest {
459
461
460
462
// if run with --changed, don't exit if no tests are found
461
463
if ( ! files . length ) {
462
- await this . reportCoverage ( true )
464
+ // Report coverage for uncovered files
465
+ const coverage = await this . coverageProvider ?. generateCoverage ?.( { allTestsRun : true } )
466
+ await this . reportCoverage ( coverage , true )
463
467
464
468
this . logger . printNoTestFound ( filters )
465
469
@@ -645,8 +649,10 @@ export class Vitest {
645
649
. finally ( async ( ) => {
646
650
// can be duplicate files if different projects are using the same file
647
651
const files = Array . from ( new Set ( specs . map ( ( [ , p ] ) => p ) ) )
648
- await this . report ( 'onFinished' , this . state . getFiles ( files ) , this . state . getUnhandledErrors ( ) )
649
- await this . reportCoverage ( allTestsRun )
652
+ const coverage = await this . coverageProvider ?. generateCoverage ( { allTestsRun } )
653
+
654
+ await this . report ( 'onFinished' , this . state . getFiles ( files ) , this . state . getUnhandledErrors ( ) , coverage )
655
+ await this . reportCoverage ( coverage , allTestsRun )
650
656
651
657
this . runningPromise = undefined
652
658
this . isFirstRun = false
@@ -946,12 +952,12 @@ export class Vitest {
946
952
return Array . from ( new Set ( files ) )
947
953
}
948
954
949
- private async reportCoverage ( allTestsRun : boolean ) {
955
+ private async reportCoverage ( coverage : unknown , allTestsRun : boolean ) {
950
956
if ( ! this . config . coverage . reportOnFailure && this . state . getCountOfFailedTests ( ) > 0 )
951
957
return
952
958
953
959
if ( this . coverageProvider ) {
954
- await this . coverageProvider . reportCoverage ( { allTestsRun } )
960
+ await this . coverageProvider . reportCoverage ( coverage , { allTestsRun } )
955
961
// notify coverage iframe reload
956
962
for ( const reporter of this . reporters ) {
957
963
if ( reporter instanceof WebSocketReporter )
0 commit comments