Test Runner (Spouštěč testů)
WARNING
Toto je pokročilé API. Pokud pouze spouštíte testy, pravděpodobně ho nebudete potřebovat. Primárně je určeno pro autory knihoven.
Cestu ke svému spouštěči testů můžete zadat pomocí volby runner
v konfiguračním souboru. Tento soubor by měl mít výchozí export s třídou implementující následující metody:
export interface VitestRunner {
/**
* První metoda, která se volá před samotným sběrem a spouštěním testů.
*/
onBeforeCollect?(paths: string[]): unknown;
/**
* Volá se po sběru testů a před "onBeforeRun".
*/
onCollected?(files: File[]): unknown;
/**
* Volá se, když má spouštěč testů zrušit další spouštění testů.
* Spouštěč by měl reagovat na toto volání a označit testy a sady jako přeskočené v
* "onBeforeRunSuite" a "onBeforeRunTest", pokud je tato metoda volána.
*/
onCancel?(reason: CancelReason): unknown;
/**
* Volá se před spuštěním jednoho testu. Ještě nemá 'výsledek'.
*/
onBeforeRunTest?(test: Test): unknown;
/**
* Volá se před samotným spuštěním testovací funkce. Již má "result" se "state" a "startTime".
*/
onBeforeTryTest?(test: Test, retryCount: number): unknown;
/**
* Volá se po nastavení výsledku a stavu testu.
*/
onAfterRunTest?(test: Test): unknown;
/**
* Volá se po spuštění testovací funkce. Ještě nemá nový stav. Nebude volána, pokud testovací funkce vyhodí chybu.
*/
onAfterTryTest?(test: Test, retryCount: number): unknown;
/**
* Volá se před spuštěním jedné sady testů. Ještě nemá "result".
*/
onBeforeRunSuite?(suite: Suite): unknown;
/**
* Volá se po spuštění jedné sady testů. Má stav a výsledek.
*/
onAfterRunSuite?(suite: Suite): unknown;
/**
* Pokud je definována, bude volána namísto obvyklého rozdělení a zpracování sady Vitest.
* "before" a "after" háky nebudou ignorovány.
*/
runSuite?(suite: Suite): Promise<void>;
/**
* Pokud je definována, bude volána místo obvyklého zpracování testů Vitest. Užitečné, pokud máte vlastní testovací funkci.
* "before" a "after" háky nebudou ignorovány.
*/
runTest?(test: Test): Promise<void>;
/**
* Volá se, když je úkol aktualizován. Stejné jako "onTaskUpdate" v reportéru, ale toto běží ve stejném vlákně jako testy.
*/
onTaskUpdate?(task: [string, TaskResult | undefined][]): Promise<void>;
/**
* Volá se před spuštěním všech testů v sebraných cestách.
*/
onBeforeRun?(files: File[]): unknown;
/**
* Volá se po spuštění všech testů v sebraných cestách.
*/
onAfterRun?(files: File[]): unknown;
/**
* Volá se, když je definován nový kontext pro test. Užitečné, pokud chcete přidat vlastní vlastnosti do kontextu.
* Pokud chcete definovat vlastní kontext pouze pomocí spouštěče, zvažte použití "beforeAll" v konfiguračním souboru místo toho.
*/
extendTestContext?(context: TestContext): TestContext;
/**
* Volá se, když jsou importovány určité soubory. Může být volána ve dvou situacích: při sběru testů a při importu konfiguračních souborů.
*/
importFile(filepath: string, source: VitestRunnerImportSource): unknown;
/**
* Veřejně dostupná konfigurace.
*/
config: VitestRunnerConfig;
}
Při inicializaci této třídy Vitest předává konfiguraci Vitest - měli byste ji zpřístupnit jako vlastnost config
.
WARNING
Vitest také injektuje instanci ViteNodeRunner
jako vlastnost __vitest_executor
. Můžete ji použít ke zpracování souborů v metodě importFile
(toto je výchozí chování TestRunner
a BenchmarkRunner
).
ViteNodeRunner
poskytuje metodu executeId
, která se používá k importu testovacích souborů v prostředí kompatibilním s Vite. To znamená, že bude řešit importy a transformovat obsah souboru za běhu, aby mu Node rozuměl.
TIP
Podpora snapshotů a některé další funkce závisí na spouštěči. Pokud je nechcete ztratit, můžete svůj spouštěč rozšířit z VitestTestRunner
importovaného z vitest/runners
. Zpřístupňuje také BenchmarkNodeRunner
, pokud chcete rozšířit funkčnost benchmarků.
Your task function (Funkce pro vlastní úkoly)
Můžete rozšířit systém úkolů Vitest o své vlastní úkoly. Úkol je objekt, který je součástí sady. Automaticky se přidává do aktuální sady pomocí metody suite.custom
:
// ./utils/custom.js
import { getCurrentSuite, setFn } from 'vitest/suite';
export { describe, beforeAll, afterAll } from 'vitest';
// tato funkce bude volána, když Vitest sbírá úkoly
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
Pokud nemáte vlastní spouštěč nebo jste nedefinovali metodu runTest
, Vitest se pokusí úkol načíst automaticky. Pokud jste nepřidali funkci pomocí setFn
, test selže.
TIP
Vlastní systém úkolů podporuje háky a kontexty. Pokud chcete podporovat řetězení vlastností (jako only
, skip
a vaše vlastní), můžete importovat createChainable
z vitest/suite
a zabalit svou funkci s ním. V takovém případě budete muset volat custom
jako custom.call(this)
.