Lefedettség
A Vitest natív kódfedettséget támogat a v8 és instrumentált kódfedettséget az istanbul segítségével.
Lefedettségi Szolgáltatók
Mind a v8, mind az istanbul támogatása opcionális. Alapértelmezés szerint a v8 kerül használatra.
A lefedettség eszköz kiválasztásához állítsa a test.coverage.provider értékét v8-ra vagy istanbul-ra:
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'istanbul', // vagy 'v8'
},
},
});Amikor elindítja a Vitest-et, automatikusan felajánlja a megfelelő támogatási csomag telepítését.
Vagy ha inkább manuálisan telepítené őket:
# A v8-hoz
npm i -D @vitest/coverage-v8
# Az istanbulhoz
npm i -D @vitest/coverage-istanbulLefedettség Beállítása
TIP
Javasolt mindig definiálni a coverage.include beállítást a konfigurációs fájlban. Ez segít a Vitestnek csökkenteni a coverage.all által kiválasztott fájlok számát.
Lefedettség melletti teszteléshez használja a --coverage flag-et a CLI-ben. Alapértelmezés szerint a ['text', 'html', 'clover', 'json'] riportálók lesznek használva.
{
"scripts": {
"test": "vitest",
"coverage": "vitest run --coverage"
}
}A konfiguráláshoz állítsa be a test.coverage beállításokat a konfigurációs fájlban:
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});Egyéni lefedettségi riporter
Egyéni lefedettségi riportereket használhat a csomag névét vagy abszolút elérési útját megadva a test.coverage.reporter beállításban:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
reporter: [
// Riportaló megadása NPM csomag neve alapján
['@vitest/custom-coverage-reporter', { someOption: true }],
// Riportaló megadása helyi elérési út alapján
'/absolute/path/to/custom-reporter.cjs',
],
},
},
});Az egyéni riportereket az Istanbul tölti be, és meg kell felelniük a riportalói interfészének. Tekintse meg a beépített riporterek implementációját referenciaként.
// custom-reporter.cjs
const { ReportBase } = require('istanbul-lib-report');
module.exports = class CustomReporter extends ReportBase {
constructor(opts) {
super();
// A konfigurációból átadott opciók itt érhetők el
this.file = opts.file;
}
onStart(root, context) {
this.contentWriter = context.writer.writeFile(this.file);
this.contentWriter.println('Start of custom coverage report');
}
onEnd() {
this.contentWriter.println('End of custom coverage report');
this.contentWriter.close();
}
};Egyéni Lefedettség Szolgáltató
Egyéni lefedettségi szolgáltatót is megadhat a test.coverage.provider értékének 'custom' -ra állításával:
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
provider: 'custom',
customProviderModule: 'my-custom-coverage-provider',
},
},
});Az egyéni szolgáltatókhoz egy customProviderModule opció szükséges, amely egy modulnév vagy elérési út a CoverageProviderModule betöltéséhez. Ennek egy olyan objektumot kell exportálnia, amely a CoverageProviderModule-t alapértelmezett exportként valósítja meg.
// my-custom-coverage-provider.ts
import type {
CoverageProvider,
CoverageProviderModule,
ResolvedCoverageOptions,
Vitest,
} from 'vitest';
const CustomCoverageProviderModule: CoverageProviderModule = {
getProvider(): CoverageProvider {
return new CustomCoverageProvider();
},
// Implements rest of the CoverageProviderModule ...
};
class CustomCoverageProvider implements CoverageProvider {
name = 'custom-coverage-provider';
options!: ResolvedCoverageOptions;
initialize(ctx: Vitest) {
this.options = ctx.config.coverage;
}
// Implements rest of the CoverageProvider ...
}
export default CustomCoverageProviderModule;További részletekért tekintse meg a típusdefiníciót.
Az alapértelmezett lefedettségi mappa helyének megváltoztatása
Lefedettség vizsgálatkor egy coverage mappa jön létre a projekt gyökérkönyvtárában. Ha egy másik könyvtárba szeretné helyezni, használja a test.coverage.reportsDirectory tulajdonságot a vite.config.js fájlban.
import { defineConfig } from 'vite';
export default defineConfig({
test: {
coverage: {
reportsDirectory: './tests/unit/coverage',
},
},
});Kód kihagyása
Mindkét lefedettség szolgáltatónak megvan a saját módja a kód kihagyására a lefedettségi jelentésekből:
TypeScript használata esetén a forráskódok az esbuild segítségével kerülnek transzpilálásra, amely eltávolítja az összes megjegyzést a forráskódokból (esbuild#516). A jogi megjegyzéseknek minősülő megjegyzések megmaradnak.
Az istanbul szolgáltató esetében a @preserve kulcsszót is belefoglalhatja a figyelmen kívül hagyási tippbe. Ne feledje, hogy ezek a figyelmen kívül hagyási tippek mostantól a végső éles buildben is szerepelhetnek.
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {A v8 esetében ez nem jelent problémát. A v8 ignore megjegyzések a Typescripttel a szokásos módon használhatók:
/* v8 ignore next 3 */
if (condition) {Egyéb Opciók
A lefedettségi beállításokért lásd a lefedettség Konfigurációs Referenciát.
Vitest UI
Ellenőrizheted a lefedettségi jelentésedet a Vitest UI-ban.
A Vitest UI akkor jeleníti meg a lefedettségi jelentést, ha az engedélyezve van, és a html lefedettségi riportáló elérhető. Ellenkező esetben nem lesz elérhető:
- engedélyezze a
coverage.enabled=truebeállítást a konfigurációs fájlban, vagy futtassa a Vitest-et a--coverage.enabled=trueflag-gel - adja hozzá a
html-t acoverage.reporterlistához: engedélyezheti asubdiropciót is, hogy a lefedettségi jelentést egy alkönyvtárba helyezze



