Egyéni Pool
WARNING
Ez egy fejlett és rendkívül alacsony szintű API. Ha csak teszteket szeretne futtatni, valószínűleg nincs szüksége erre. Elsősorban könyvtárfejlesztők használják.
A Vitest a teszteket poolokban futtatja. Alapértelmezés szerint több pool létezik:
threads: tesztek futtatásanode:worker_threadshasználatával (az izolációt új worker kontextus biztosítja)forks: tesztek futtatásanode:child_processhasználatával (az izolációt újchild_process.forkfolyamat biztosítja)vmThreads: tesztek futtatásanode:worker_threadshasználatával (de az izolációt avmmodul biztosítja új worker kontextus helyett)browser: tesztek futtatása böngésző szolgáltatók használatávaltypescript: típusellenőrzés futtatása a teszteken
Saját poolt egy fájlútvonal megadásával adhat meg:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
// alapértelmezés szerint minden fájlt egyéni poollal futtat
pool: './my-custom-pool.ts',
// az opciókat a `poolOptions` objektumban adhatja meg
poolOptions: {
myCustomPool: {
customProperty: true,
},
},
},
});Ha különböző poolokban kell teszteket futtatnia, használja a projects funkciót:
export default defineConfig({
test: {
projects: [
{
extends: true,
test: {
pool: 'threads',
},
},
],
},
});API
A pool opcióban megadott fájlnak egy függvényt kell exportálnia (lehet aszinkron), amely első paraméterként elfogadja a Vitest interfészt. Ennek a függvénynek egy ProcessPool interfésznek megfelelő objektumot kell visszaadnia:
import type { ProcessPool, TestSpecification } from 'vitest/node';
export interface ProcessPool {
name: string;
runTests: (
files: TestSpecification[],
invalidates?: string[]
) => Promise<void>;
collectTests: (
files: TestSpecification[],
invalidates?: string[]
) => Promise<void>;
close?: () => Promise<void>;
}A függvényt csak egyszer hívják meg (kivéve, ha a szerver konfigurációja frissült), és általában jó ötlet mindent inicializálni, amire a tesztekhez szüksége van a függvényen belül, és azt újra felhasználni, amikor a runTests meghívásra kerül.
A Vitest akkor hívja meg a runTests-t, amikor új teszteket ütemeznek futtatásra. Nem hívja meg, ha a files üres. Az első argumentum egy TestSpecification tömb. A fájlokat a sequencer rendezi, mielőtt a runTests meghívásra kerül. Lehetséges (de valószínűtlen), hogy ugyanaz a fájl kétszer is szerepeljen, de mindig más projekthez fog tartozni – ezt a projects konfigurációval valósítják meg.
A Vitest megvárja a runTests végrehajtását, mielőtt befejezi a futtatást (azaz csak a runTests feloldása után bocsátja ki az onFinished eseményt).
Ha egyéni poolt használ, akkor Önnek kell biztosítania a tesztfájlok futtatását és azok eredményeinek kezelését – ehhez hivatkozhat a vitest.state állapotra (a legfontosabbak a collectFiles és az updateTasks). A Vitest ehhez a @vitest/runner csomag startTests függvényét használja.
A Vitest meghívja a collectTests-t, ha a vitest.collect meghívásra kerül, vagy a vitest list parancsot CLI-n keresztül hívják meg. Ugyanúgy működik, mint a runTests, de nem kell teszt visszahívásokat futtatnia, csak a feladataikat kell jelentenie a vitest.state.collectFiles(files) meghívásával.
A különböző folyamatok közötti kommunikációhoz létrehozhat egy metódusokat tartalmazó objektumot a createMethodsRPC segítségével a vitest/node csomagból, és bármilyen kommunikációs formát használhat, amelyet előnyben részesít. Például, ha WebSockets-et szeretne használni a birpc-vel, írhat valami ilyesmit:
import { createBirpc } from 'birpc';
import { parse, stringify } from 'flatted';
import { createMethodsRPC, TestProject } from 'vitest/node';
function createRpc(project: TestProject, wss: WebSocketServer) {
return createBirpc(createMethodsRPC(project), {
post: msg => wss.send(msg),
on: fn => wss.on('message', fn),
serialize: stringify,
deserialize: parse,
});
}Egy egyszerű példát láthat egy teljesen a semmiből épített poolra, amely nem futtat teszteket, hanem összegyűjtöttként jelöli meg őket a pool/custom-pool.ts fájlban.