Tesztfuttató
WARNING
Ez egy haladó szintű API. Ha csak teszteket futtatsz, valószínűleg nincs szükséged erre. Elsősorban könyvtárszerzők használják.
A tesztfuttató elérési útját a konfigurációs fájlban a runner
opcióval adhatod meg. Ennek a fájlnak egy alapértelmezett exporttal kell rendelkeznie, amely egy osztályt tartalmaz, ami implementálja ezeket a metódusokat:
export interface VitestRunner {
/**
* Elsőként meghívott metódus a tesztek gyűjtése és futtatása előtt.
*/
onBeforeCollect?(paths: string[]): unknown;
/**
* A tesztek gyűjtése után, de az "onBeforeRun" előtt hívódik meg.
*/
onCollected?(files: File[]): unknown;
/**
* Akkor hívódik meg, amikor a tesztfuttatónak le kell mondania a további tesztfuttatásokat.
* A futtatónak figyelnie kell ezt a metódust, és a teszteket, valamint a tesztcsomagokat kihagyottként kell megjelölnie az
* "onBeforeRunSuite" és "onBeforeRunTest" metódusokban, ha meghívják.
*/
onCancel?(reason: CancelReason): unknown;
/**
* Egyetlen teszt futtatása előtt hívódik meg. Még nincs 'result' értéke.
*/
onBeforeRunTest?(test: Test): unknown;
/**
* Ez a metódus a tesztfüggvény tényleges futtatása előtt hívódik meg. Már van "eredménye", amely tartalmazza az "állapotot" és a "kezdési időt".
*/
onBeforeTryTest?(test: Test, retryCount: number): unknown;
/**
* Az eredmény és az állapot beállítása után hívódik meg.
*/
onAfterRunTest?(test: Test): unknown;
/**
* Ez a metódus közvetlenül a tesztfüggvény futtatása után hívódik meg. Még nincs új állapota. Nem lesz meghívva, ha a tesztfüggvény hibát dob.
*/
onAfterTryTest?(test: Test, retryCount: number): unknown;
/**
* Egyetlen tesztcsomag futtatása előtt hívódik meg. Még nincs 'result' értéke.
*/
onBeforeRunSuite?(suite: Suite): unknown;
/**
* Egyetlen tesztcsomag futtatása után hívódik meg. Van állapota és eredménye.
*/
onAfterRunSuite?(suite: Suite): unknown;
/**
* Ha definiálva van, a szokásos Vitest tesztcsomag particionálás és kezelés helyett kerül meghívásra.
* A 'before' és 'after' hook-ok figyelembe lesznek véve.
*/
runSuite?(suite: Suite): Promise<void>;
/**
* Ha definiálva van, a szokásos Vitest kezelés helyett lesz meghívva. Hasznos, ha egyedi tesztfüggvényed van.
* A 'before' és 'after' hook-ok figyelembe lesznek véve.
*/
runTest?(test: Test): Promise<void>;
/**
* Akkor kerül meghívásra, amikor egy feladat frissítésre kerül. Ugyanaz, mint az "onTaskUpdate" egy reporterben, de ez ugyanabban a szálban fut, mint a tesztek.
*/
onTaskUpdate?(task: [string, TaskResult | undefined][]): Promise<void>;
/**
* Az összes teszt futtatása előtt hívódik meg a gyűjtött útvonalakon.
*/
onBeforeRun?(files: File[]): unknown;
/**
* Közvetlenül az összes teszt futtatása után hívódik meg a gyűjtött útvonalakon.
*/
onAfterRun?(files: File[]): unknown;
/**
* Akkor hívódik meg, amikor egy teszthez új kontextus van definiálva. Hasznos, ha egyedi tulajdonságokat szeretnél hozzáadni a kontextushoz.
* Ha csak egyedi kontextust szeretnél definiálni egy futtatóval, fontold meg a "beforeAll" használatát a "setupFiles"-ban helyette.
*/
extendTestContext?(context: TestContext): TestContext;
/**
* Akkor hívódik meg, amikor bizonyos fájlok importálásra kerülnek. Két esetben hívható meg: tesztek gyűjtésekor és beállítási fájlok importálásakor.
*/
importFile(filepath: string, source: VitestRunnerImportSource): unknown;
/**
* Nyilvánosan elérhető konfiguráció.
*/
config: VitestRunnerConfig;
}
Az osztály inicializálásakor a Vitest átadja a Vitest konfigurációt - ezt egy config
tulajdonságként kell elérhetővé tenned.
WARNING
A Vitest injektál egy ViteNodeRunner
példányt is __vitest_executor
tulajdonságként. Ezt használhatod a fájlok feldolgozására az importFile
metódusban (ez a TestRunner
és a BenchmarkRunner
alapértelmezett viselkedése).
A ViteNodeRunner
elérhetővé teszi az executeId
metódust, amelyet a tesztfájlok importálására használnak egy Vite-barát környezetben. Ez azt jelenti, hogy futásidőben feloldja az importokat és átalakítja a fájl tartalmát, hogy a Node értelmezni tudja.
TIP
A pillanatkép-támogatás (snapshot support) és néhány más funkció a futtatótól függ. Ha nem szeretnéd elveszíteni, kiterjesztheted a tesztfuttatódat a VitestTestRunner
osztályból, amelyet a vitest/runners
csomagból importálhatsz. Ez elérhetővé teszi a BenchmarkNodeRunner
-t is, ha ki szeretnéd terjeszteni a benchmark funkcionalitást.
Egyéni feladatok
Kiterjesztheted a Vitest feladat-rendszerét a saját feladataiddal. A feladat egy objektum, amely a tesztcsomag része. Ez automatikusan hozzáadódik az aktuális tesztcsomaghoz egy suite.custom
metódussal:
// ./utils/custom.js
import { getCurrentSuite, setFn } from 'vitest/suite';
export { describe, beforeAll, afterAll } from 'vitest';
// Ez a függvény akkor kerül meghívásra, amikor a Vitest összegyűjti a feladatokat
export const myCustomTask = function (name, fn) {
const task = getCurrentSuite().custom(name);
task.meta = {
customPropertyToDifferentiateTask: true,
};
setFn(task, fn || (() => {}));
};
// ./garden/tasks.test.js
import {
afterAll,
beforeAll,
describe,
myCustomTask,
} from '../utils/custom.js';
import { gardener } from './gardener.js';
describe('take care of the garden', () => {
beforeAll(() => {
gardener.putWorkingClothes();
});
myCustomTask('weed the grass', () => {
gardener.weedTheGrass();
});
myCustomTask('water flowers', () => {
gardener.waterFlowers();
});
afterAll(() => {
gardener.goHome();
});
});
vitest ./garden/tasks.test.js
WARNING
Ha nincs egyedi futtatód, vagy nem definiáltad a runTest
metódust, a Vitest megpróbálja automatikusan lekérni a feladatot. Ha nem adtál hozzá függvényt a setFn
-nel, akkor az sikertelen lesz.
TIP
Az egyedi feladatrendszer támogatja a hook-okat és a kontextusokat. Ha támogatni szeretnéd a tulajdonság-láncolást (mint például az only
, skip
és a saját egyedi tulajdonságaid), importálhatod a createChainable
-t a vitest/suite
-ből, és becsomagolhatod a függvényedet vele. Ebben az esetben a custom
metódust custom.call(this)
formában kell meghívnod.