Coverage
Vitest supporta nativamente la code coverage tramite v8
e la code coverage strumentata tramite istanbul
.
Provider di Coverage
TIP
A partire da Vitest v0.22.0
Sia il supporto per v8
che per istanbul
sono opzionali. Per impostazione predefinita, viene utilizzato v8
.
È possibile selezionare lo strumento di coverage impostando test.coverage.provider
su v8
o istanbul
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'istanbul', // or 'v8'
},
},
});
Quando si avvia Vitest, verrà richiesto di installare automaticamente il pacchetto di supporto corrispondente.
In alternativa, è possibile installare i pacchetti manualmente:
# Per v8
npm i -D @vitest/coverage-v8
# Per istanbul
npm i -D @vitest/coverage-istanbul
Configurazione della Coverage
Per eseguire i test con la coverage abilitata, è possibile passare il flag --coverage
nella riga di comando. Per impostazione predefinita, verranno utilizzati i reporter ['text', 'html', 'clover', 'json']
.
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}
Per configurare le opzioni di coverage, impostare test.coverage
nel file di configurazione:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});
Provider di Coverage Personalizzato
È anche possibile fornire un provider di coverage personalizzato impostando test.coverage.provider
su 'custom'
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'custom',
customProviderModule: 'my-custom-coverage-provider',
},
},
});
I provider personalizzati richiedono l'opzione customProviderModule
, che specifica il nome del modulo o il percorso da cui caricare il CoverageProviderModule
. Questo modulo deve esportare un oggetto che implementa CoverageProviderModule
come export predefinito:
// my-custom-coverage-provider.ts
import type {
CoverageProvider,
CoverageProviderModule,
ResolvedCoverageOptions,
Vitest,
} from 'vitest';
const CustomCoverageProviderModule: CoverageProviderModule = {
getProvider(): CoverageProvider {
return new CustomCoverageProvider();
},
// Implementa il resto di CoverageProviderModule ...
};
class CustomCoverageProvider implements CoverageProvider {
name = 'custom-coverage-provider';
options!: ResolvedCoverageOptions;
initialize(ctx: Vitest) {
this.options = ctx.config.coverage;
}
// Implementa il resto di CoverageProvider ...
}
export default CustomCoverageProviderModule;
Consultare la definizione del tipo per maggiori dettagli.
Modifica della Cartella di Coverage Predefinita
Quando viene generato un report di coverage, viene creata una cartella coverage
nella directory principale del progetto. Per spostare questa cartella in una directory diversa, utilizzare la proprietà test.coverage.reportsDirectory
nel file vite.config.js
.
import { defineConfig } from 'vite';
export default defineConfig({
test: {
coverage: {
reportsDirectory: './tests/unit/coverage',
},
},
});
Ignora Codice
Entrambi i provider di coverage offrono metodi per escludere il codice dai report di coverage:
Quando si utilizza TypeScript, i sorgenti vengono transpilati tramite esbuild
, che rimuove tutti i commenti dai sorgenti (esbuild#516). I commenti considerati legal comments vengono preservati.
Per il provider istanbul
, è possibile includere la parola chiave @preserve
nel suggerimento di ignorare. Si noti che questi suggerimenti per l'esclusione potrebbero essere inclusi nella build di produzione finale.
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {
Per v8
questo non rappresenta un problema. È possibile utilizzare i commenti c8 ignore
con Typescript come di consueto:
/* c8 ignore next 3 */
if (condition) {
Altre Opzioni
Per visualizzare tutte le opzioni configurabili per la coverage, consultare il Coverage Config Reference.
Vitest UI
A partire da Vitest 0.31.0, è possibile visualizzare il report di coverage nella Vitest UI.
L'interfaccia utente di Vitest abiliterà il report di coverage se è esplicitamente abilitato e se è presente il reporter html; in caso contrario, non sarà disponibile:
- abilitare
coverage.enabled=true
nella configurazione o eseguire Vitest con il flag--coverage.enabled=true
- aggiungere
html
all'elencocoverage.reporters
: è anche possibile abilitare l'opzionesubdir
per inserire il report di coverage in una sottodirectory



