Skip to content
Vitest 1
Main Navigation ÚtmutatóAPIKonfigurációHaladó
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

Haladó

Node API

Tesztfuttató

Feladat Metaadatok

Jelentéskészítők kiterjesztése

Egyéni Készlet

Ezen az oldalon

Egyéni Készlet ​

WARNING

Ez egy haladó szintű API. Ha csak teszteket futtatsz, valószínűleg nincs szükséged rá. Elsősorban könyvtárszerzők számára készült.

A Vitest a teszteket készletekben futtatja. Alapértelmezés szerint a következő készletek érhetők el:

  • threads: a tesztek futtatása a node:worker_threads használatával (az izolációt egy új worker kontextus biztosítja).
  • forks: a tesztek futtatása a node:child_process használatával (az izolációt egy új child_process.fork folyamat biztosítja).
  • vmThreads: a tesztek futtatása a node:worker_threads használatával (de az izolációt a vm modul biztosítja egy új worker kontextus helyett).
  • browser: a tesztek futtatása böngésző szolgáltatók használatával.
  • typescript: a típusellenőrzés futtatása a teszteken.

Megadhatsz saját készletet egy fájl elérési útjával:

ts
import { defineConfig } from 'vitest/config';
// ---cut---
export default defineConfig({
  test: {
    // Alapértelmezés szerint minden fájlt egyéni készlettel futtat
    pool: './my-custom-pool.ts',
    // A `poolOptions` objektummal opciókat adhatsz meg
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
    // Megadhatsz készletet a fájlok egy részhalmazához is
    poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
  },
});

API ​

A pool opcióban megadott fájlnak exportálnia kell egy függvényt (akár aszinkron is lehet), amely első argumentumként elfogadja a Vitest interfészt. Ennek a függvénynek egy ProcessPool interfészt implementáló objektumot kell visszaadnia.

ts
import { ProcessPool, WorkspaceProject } from 'vitest/node';

export interface ProcessPool {
  name: string;
  runTests: (
    files: [project: WorkspaceProject, testFile: string][],
    invalidates?: string[]
  ) => Promise<void>;
  close?: () => Promise<void>;
}

A függvény csak egyszer kerül meghívásra (hacsak a szerver konfigurációja nem frissül), és általában érdemes a tesztekhez szükséges összes dolgot ebben a függvényben inicializálni, és újra felhasználni, amikor a runTests meghívásra kerül.

A Vitest meghívja a runTests függvényt, amikor új teszteket terveznek futtatni. Nem hívja meg, ha a files üres. Az első argumentum egy tuple-ket tartalmazó tömb: az első elem egy hivatkozás egy munkaterület projektre, a második pedig egy abszolút elérési út egy tesztfájlhoz. A fájlok a sequencer segítségével vannak rendezve a runTests meghívása előtt. Lehetséges (de valószínűtlen), hogy ugyanaz a fájl kétszer szerepel, de mindig más projekthez tartozik - ezt a vitest.workspace.ts konfiguráció biztosítja.

A Vitest vár a runTests befejeződésére, mielőtt befejezi a futtatást (azaz csak a runTests feloldása után küldi el az onFinished eseményt).

Ha egyéni készletet használsz, neked kell megadnod a tesztfájlokat és azok eredményeit - ehhez hivatkozhatsz a vitest.state fájlra (közülük a collectFiles és az updateTasks a legfontosabbak). A Vitest a @vitest/runner csomag startTests függvényét használja ehhez.

A különböző folyamatok közötti kommunikációhoz a vitest/node fájlból származó createMethodsRPC segítségével létrehozhatsz egy metódusok objektumát, és használhatsz bármilyen tetszőleges kommunikációs módot. Például, ha WebSockets-et szeretnél használni a birpc-vel, írhatod a következő módon:

ts
import { createBirpc } from 'birpc';
import { parse, stringify } from 'flatted';
import { WorkspaceProject, createMethodsRPC } from 'vitest/node';

function createRpc(project: WorkspaceProject, wss: WebSocketServer) {
  return createBirpc(createMethodsRPC(project), {
    post: msg => wss.send(msg),
    on: fn => wss.on('message', fn),
    serialize: stringify,
    deserialize: parse,
  });
}

Annak érdekében, hogy minden tesztet begyűjtsenek, meghívhatod a ctx.state.collectFiles függvényt, és értesítheted a Vitest riportereket:

ts
async function runTests(project: WorkspaceProject, tests: string[]) {
  // ... tesztek futtatása, elhelyezése a "files"-ba és a "tasks"-ba
  const methods = createMethodsRPC(project);
  await methods.onCollected(files);
  // A legtöbb riporter az "onTaskUpdate" eseményben frissülő eredményekre támaszkodik
  await methods.onTaskUpdate(tasks);
}

Egy egyszerű példát láthatsz a pool/custom-pool.ts fájlban.

Pager
Előző oldalJelentéskészítők kiterjesztése

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/pool

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors