Skip to content
Vitest 3
Main Navigation Útmutató & APIKonfigurációBöngésző módHaladó API
3.2.0
2.1.9
1.6.1
0.34.6

magyar

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština

magyar

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština

Megjelenés

Sidebar Navigation

Bevezetés

Miért Vitest

Első lépések

Jellemzők

Vitest konfigurálása

API

Teszt API Referencia

Mock Függvények

Vi

expect

expectTypeOf

assert

assertType

Útmutató

Parancssori felület

Teszt szűrés

Tesztprojektek

Jelentéskészítők (Reporters)

Kódlefedettség

Snapshot

Mockolás

Párhuzamos végrehajtás

Típusok Tesztelése

Vitest UI

Forráskódba ágyazott tesztelés

Tesztkörnyezet

Teszt annotációk

Tesztkörnyezet

Matcherek kiterjesztése

IDE Integrációk

Hibakeresés

Gyakori hibák

Migrációs útmutató

Migrálás a Vitest 3.0-ra

Migrálás Jesstről

Teljesítmény

Teszt teljesítmény profilozása

Teljesítmény javítása

Böngésző üzemmód

Haladó API

Összehasonlítás más tesztfuttatókkal

Ezen az oldalon

Kódlefedettség ​

A Vitest támogatja a natív kódlefedettséget a v8 segítségével, és az instrumentált kódlefedettséget az istanbul segítségével.

Kódlefedettség-szolgáltatók ​

A v8 és az istanbul támogatása is opcionális. Alapértelmezés szerint a v8 kerül felhasználásra.

A lefedettségi eszközt a test.coverage.provider v8 vagy istanbul értékére állítva választhatja ki:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      provider: 'istanbul', // vagy 'v8'
    },
  },
});

Amikor elindítja a Vitest folyamatot, az automatikusan felkéri a megfelelő támogató csomag telepítésére.

Vagy ha inkább manuálisan telepítené:

bash
npm i -D @vitest/coverage-v8
bash
npm i -D @vitest/coverage-istanbul

V8 szolgáltató ​

INFO

Az alábbi V8 lefedettség leírása Vitest-specifikus, és nem vonatkozik más tesztfuttatókra. A v3.2.0 óta a Vitest AST alapú lefedettség-átalakítást használ a V8 lefedettséghez, amely az Istanbullal azonos lefedettségi jelentéseket készít.

Ezáltal a felhasználók a V8 sebességét és az Istanbul pontosságát együtt élvezhetik.

Alapértelmezés szerint a Vitest a 'v8' lefedettségi szolgáltatót használja. Ez a szolgáltató olyan JavaScript futtatókörnyezetet igényel, amely a V8 motorra épül, mint például a NodeJS, Deno vagy bármely Chromium alapú böngésző (pl. Google Chrome).

A lefedettség gyűjtése futásidőben történik, a V8-nak utasításokat adva a node:inspector és a Chrome DevTools Protocol segítségével a böngészőkben. A felhasználói forrásfájlok előzetes instrumentálás nélkül is végrehajthatók.

  • ✅ Ajánlott opció
  • ✅ Nincs előzetes transzpilálási lépés. A tesztfájlok úgy futtathatók, ahogy vannak.
  • ✅ Gyorsabb végrehajtási idő, mint az Istanbullal.
  • ✅ Alacsonyabb memóriahasználat, mint az Istanbullal.
  • ✅ A lefedettségi jelentés pontossága ugyanolyan pontos, mint az Istanbullal (Vitest v3.2.0 óta).
  • ⚠️ Bizonyos esetekben lassabb lehet, mint az Istanbul, például sok különböző modul betöltésekor. A V8 nem támogatja a lefedettség gyűjtésének korlátozását adott modulokra.
  • ⚠️ Vannak kisebb korlátozások, amelyeket a V8 motor támaszt. Lásd: ast-v8-to-istanbl | Korlátozások.
  • ❌ Nem működik olyan környezetekben, amelyek nem használnak V8-at, például a Firefox vagy a Bun. Vagy olyan környezetekben, amelyek nem teszik elérhetővé a V8 lefedettséget a profilozón keresztül, mint például a Cloudflare Workers.

Istanbul szolgáltató ​

Az Istanbul kódlefedettségi eszközök 2012 óta léteznek, és nagyon jól beváltak a gyakorlatban. Ez a szolgáltató bármilyen JavaScript futtatókörnyezetben működik, mivel a lefedettség nyomon követése a felhasználói forrásfájlok instrumentálásával történik.

A gyakorlatban a forrásfájlok instrumentálása további JavaScript hozzáadását jelenti a felhasználói fájlokhoz:

js
// Egyszerűsített példa az elágazás és függvény lefedettségi számlálóira
const coverage = { 
  branches: { 1: [0, 0] }, 
  functions: { 1: 0 }, 
} 

export function getUsername(id) {
  // A függvény lefedettsége megnő, amikor meghívják
  coverage.functions['1']++; 

  if (id == null) {
    // Az elágazás lefedettsége megnő, amikor meghívják
    coverage.branches['1'][0]++; 

    throw new Error('User ID is required');
  }
  // Az implicit else lefedettsége megnő, ha az if-utasítás feltétele nem teljesül
  coverage.branches['1'][1]++; 

  return database.getUser(id);
}

globalThis.__VITEST_COVERAGE__ ||= {}; 
globalThis.__VITEST_COVERAGE__[filename] = coverage; 
  • ✅ Bármilyen JavaScript futtatókörnyezetben működik
  • ✅ Széles körben használt és több mint 13 éve jól bevált.
  • ✅ Bizonyos esetekben gyorsabb, mint a V8. A lefedettség instrumentálása korlátozható adott fájlokra, ellentétben a V8-cal, ahol minden modul instrumentálásra kerül.
  • ❌ Előzetes instrumentálási lépést igényel
  • ❌ A végrehajtási sebesség lassabb, mint a V8-nál az instrumentálásból adódó többletterhelés miatt
  • ❌ Az instrumentálás növeli a fájlméretet
  • ❌ A memóriahasználat magasabb, mint a V8 esetében

Lefedettség beállítása ​

TIP

Ajánlott mindig megadni a coverage.include opciót a konfigurációs fájlban. Ez segít a Vitestnek csökkenteni a coverage.all által kiválasztott fájlok számát.

A lefedettséggel történő teszteléshez átadhatja a --coverage jelzőt a CLI-ben. Alapértelmezés szerint a ['text', 'html', 'clover', 'json'] riporter kerül felhasználásra.

json
{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

A konfigurálásához állítsa be a test.coverage beállításokat a konfigurációs fájlban:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      reporter: ['text', 'json', 'html'],
    },
  },
});

Egyéni kódlefedettség-riporter ​

Egyéni lefedettségi riportereket használhat a csomag nevének vagy abszolút útvonalának megadásával a test.coverage.reporter opcióban:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      reporter: [
        // Riportáló megadása az NPM csomag nevével
        ['@vitest/custom-coverage-reporter', { someOption: true }],

        // Riportáló megadása helyi útvonallal
        '/absolute/path/to/custom-reporter.cjs',
      ],
    },
  },
});

Az egyéni riportereket az Istanbul tölti be, és meg kell felelniük az Istanbul riporter interfészének. Lásd a beépített riporterek implementációját referenciaként.

js
const { ReportBase } = require('istanbul-lib-report');

module.exports = class CustomReporter extends ReportBase {
  constructor(opts) {
    super();

    // A konfigurációból átadott beállítások itt elérhetők
    this.file = opts.file;
  }

  onStart(root, context) {
    this.contentWriter = context.writer.writeFile(this.file);
    this.contentWriter.println('Egyéni lefedettségi jelentés kezdete');
  }

  onEnd() {
    this.contentWriter.println('Egyéni lefedettségi jelentés vége');
    this.contentWriter.close();
  }
};

Egyéni kódlefedettség-szolgáltató ​

Lehetőség van saját egyéni lefedettségi szolgáltató megadására is, a test.coverage.provider opcióban 'custom' érték megadásával:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    coverage: {
      provider: 'custom',
      customProviderModule: 'my-custom-coverage-provider',
    },
  },
});

Az egyéni szolgáltatókhoz customProviderModule opció szükséges, amely a CoverageProviderModule betöltéséhez szükséges modul nevét vagy útvonalát adja meg. Ennek egy objektumot kell exportálnia, amely alapértelmezett exportként implementálja a CoverageProviderModule interfészt:

ts
import type {
  CoverageProvider,
  CoverageProviderModule,
  ResolvedCoverageOptions,
  Vitest,
} from 'vitest';

const CustomCoverageProviderModule: CoverageProviderModule = {
  getProvider(): CoverageProvider {
    return new CustomCoverageProvider();
  },

  // Megvalósítja a CoverageProviderModule többi részét ...
};

class CustomCoverageProvider implements CoverageProvider {
  name = 'custom-coverage-provider';
  options!: ResolvedCoverageOptions;

  initialize(ctx: Vitest) {
    this.options = ctx.config.coverage;
  }

  // Megvalósítja a CoverageProvider többi részét ...
}

export default CustomCoverageProviderModule;

További részletekért tekintse meg a típusdefiníciót.

Az alapértelmezett kódlefedettség-mappa helyének módosítása ​

Amikor lefedettségi jelentést futtat, egy coverage mappa jön létre a projekt gyökérkönyvtárában. Ha ezt egy másik könyvtárba szeretné áthelyezni, használja a test.coverage.reportsDirectory beállítást a vitest.config.js fájlban.

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    coverage: {
      reportsDirectory: './tests/unit/coverage',
    },
  },
});

Kód kihagyása ​

Mindkét lefedettségi szolgáltató saját módszerekkel rendelkezik a kód figyelmen kívül hagyására a lefedettségi jelentésekből:

  • v8
  • ìstanbul
  • v8 a experimentalAstAwareRemapping: true opcióval lásd: ast-v8-to-istanbul | Kód figyelmen kívül hagyása

TypeScript használatakor a forráskódokat esbuild segítségével transzpilálják, amely eltávolítja az összes megjegyzést a forráskódból (esbuild#516). Azok a megjegyzések, amelyek legális megjegyzéseknek minősülnek, megőrzésre kerülnek.

Beilleszthet egy @preserve kulcsszót a figyelmen kívül hagyási jelzésbe. Vigyázzon, ezek a figyelmen kívül hagyási jelzések mostantól a végső éles buildbe is bekerülhetnek.

diff
-/* istanbul ignore if */
+/* istanbul ignore if -- @preserve */
if (condition) {

-/* v8 ignore if */
+/* v8 ignore if -- @preserve */
if (condition) {

Egyéb opciók ​

A lefedettség összes konfigurálható beállításának megtekintéséhez lásd a lefedettség konfigurációs referenciáját.

Lefedettség teljesítménye ​

Ha a kódlefedettség generálása lassú a projektjében, lásd a Teszt teljesítmény profilozása | Kódlefedettség részt.

Vitest UI ​

A lefedettségi jelentést a Vitest UI felületén ellenőrizheti.

A Vitest UI akkor engedélyezi a lefedettségi jelentést, ha az expliciten engedélyezve van, és az HTML lefedettségi riporter elérhető, ellenkező esetben nem lesz elérhető:

  • engedélyezze a coverage.enabled=true beállítást a konfigurációs fájlban, vagy futtassa a Vitestet a --coverage.enabled=true jelzővel
  • adja hozzá az html értéket a coverage.reporter listához: engedélyezheti a subdir beállítást is, hogy a lefedettségi jelentést egy alkönyvtárba helyezze
HTML lefedettség aktiválása a Vitest UI-banHTML lefedettség aktiválása a Vitest UI-banHTML lefedettség a Vitest UI-banHTML lefedettség a Vitest UI-ban
Pager
Előző oldalJelentéskészítők (Reporters)
Következő oldalSnapshot

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/coverage

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team