Node API
WARNING
Vitest nabízí experimentální soukromé API. Zásadní změny nemusí dodržovat SemVer, proto doporučujeme při jeho používání fixovat verzi Vitest.
startVitest
Testy Vitest můžete spustit pomocí Node API:
import { startVitest } from 'vitest/node';
const vitest = await startVitest('test');
await vitest?.close();
Funkce startVitest
vrací instanci Vitest
, pokud je možné testy spustit. Vrací undefined
, pokud nastane některá z následujících situací:
- Vitest nenalezl balíček
vite
(obvykle se instaluje s Vitest). - Pokud je povoleno pokrytí kódu (coverage) a režim běhu je "test", ale balíček pro pokrytí kódu není nainstalován (
@vitest/coverage-v8
nebo@vitest/coverage-istanbul
). - Pokud není nainstalován balíček pro prostředí (
jsdom
/happy-dom
/@edge-runtime/vm
).
Pokud je vráceno undefined
nebo testy během spuštění selžou, Vitest nastaví process.exitCode
na 1
.
Pokud není povolen režim sledování testů (watch mode), Vitest provede metodu close
.
Pokud je povolen režim sledování testů a terminál podporuje TTY, Vitest zaregistruje klávesové zkratky v konzoli.
Jako druhý argument můžete předat pole filtrů. Vitest spustí pouze testy, které obsahují alespoň jeden z předaných řetězců v cestě k souboru.
Kromě toho můžete použít třetí argument k předání argumentů příkazové řádky (CLI), které mají přednost před nastavením v konfiguraci testů.
Alternativně můžete předat kompletní konfiguraci Vite jako čtvrtý argument, který bude mít přednost před jakýmikoli jinými uživatelsky definovanými možnostmi.
Po spuštění testů můžete získat výsledky z API state.getFiles
:
const vitest = await startVitest('test');
console.log(vitest.state.getFiles()); // [{ type: 'file', ... }]
Od verze Vitest 2.1 se doporučuje používat API "Reported Tasks" (Hlášené úlohy) společně s API state.getFiles
. V budoucnu bude Vitest vracet tyto objekty přímo:
const vitest = await startVitest('test');
const [fileTask] = vitest.state.getFiles();
const testFile = vitest.state.getReportedEntity(fileTask);
createVitest
Můžete si vytvořit instanci Vitest sami pomocí funkce createVitest
. Vrací stejnou instanci Vitest
jako startVitest
, ale nespouští testy a neověřuje, zda jsou nainstalované požadované balíčky.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});
parseCLI
Tuto metodu můžete použít k parsování argumentů příkazové řádky (CLI). Přijímá řetězec (kde jsou argumenty odděleny jednou mezerou) nebo pole řetězců argumentů CLI ve stejném formátu, jaký používá Vitest CLI. Vrací filtr a options
, které pak můžete předat metodám createVitest
nebo startVitest
.
import { parseCLI } from 'vitest/node';
parseCLI('vitest ./files.ts --coverage --browser=chrome');
Vitest
Instance Vitest vyžaduje aktuální režim testování. Může to být:
test
při spouštění runtime testů.benchmark
při spouštění benchmarků.
mode
test
Testovací režim volá pouze funkce uvnitř test
nebo it
a vyvolá výjimku při nalezení bench
. Tento režim využívá nastavení include
a exclude
v konfiguraci k nalezení testovacích souborů.
benchmark
Benchmark režim volá funkce bench
a vyvolá výjimku, pokud narazí na test
nebo it
. Tento režim využívá nastavení benchmark.include
a benchmark.exclude
v konfiguraci k nalezení benchmark souborů.
start
Testy nebo benchmarky můžete spustit pomocí metody start
. Můžete předat pole řetězců pro filtrování testovacích souborů.
provide
Vitest zpřístupňuje metodu provide
, což je zkratka pro vitest.getCoreWorkspaceProject().provide
. Touto metodou můžete předávat hodnoty z hlavního vlákna do testů. Všechny hodnoty jsou před uložením zkontrolovány pomocí structuredClone
, samotné hodnoty se ale neklonují.
Pro získání hodnot v testu, musíte importovat metodu inject
z vitest
entrypoint:
import { inject } from 'vitest';
const port = inject('wsPort'); // 3000
Pro vyšší typovou bezpečnost doporučujeme rozšířit typ ProvidedContext
:
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});
vitest.provide('wsPort', 3000);
declare module 'vitest' {
export interface ProvidedContext {
wsPort: number;
}
}
WARNING
Technicky vzato je provide
metodou WorkspaceProject
, takže je omezena na konkrétní projekt. Všechny projekty ale dědí hodnoty z hlavního projektu, díky čemuž je vitest.provide
univerzální metodou předávání hodnot do testů.
TIP
Tato metoda je také k dispozici pro globální nastavovací soubory pro případy, kdy nechcete používat veřejné API:
export default function setup({ provide }) {
provide('wsPort', 3000);
}