Tesztfuttatás
WARNING
Ez az útmutató a fejlett API használatát mutatja be a tesztek Node.js szkripten keresztüli futtatásához. Ha csak teszteket szeretne futtatni, valószínűleg nem erre van szüksége. Elsősorban könyvtárfejlesztők használják.
A visszamenőlegesen nem kompatibilis változtatások nem feltétlenül követik a SemVer-t. Kérjük, rögzítse a Vitest verzióját, amikor az experimentális API-t használja.
A Vitest két módszert kínál az inicializálásra:
- A
startVitest
inicializálja a Vitestet, ellenőrzi a szükséges csomagok telepítését, és azonnal futtatja a teszteket. - A
createVitest
csak a Vitestet inicializálja, és nem futtat teszteket.
startVitest
import { startVitest } from 'vitest/node';
const vitest = await startVitest(
'test',
[], // CLI szűrők
{}, // tesztkonfiguráció felülírása
{}, // Vite konfiguráció felülírása
{} // egyéni Vitest opciók
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
console.log(testModule.moduleId, testModule.ok() ? 'megfelelt' : 'elbukott');
}
TIP
A TestModule
, TestSuite
és TestCase
API-k nem kísérleti jellegűek, és a Vitest 2.1 óta követik a SemVer-t.
createVitest
Tesztek futtatása nélkül hoz létre egy Vitest példányt.
A createVitest
metódus nem ellenőrzi a szükséges csomagok telepítését. Nem veszi figyelembe sem a config.standalone
, sem a config.mergeReports
beállításokat. A Vitest nem záródik be automatikusan, még akkor sem, ha a watch
mód le van tiltva.
import { createVitest } from 'vitest/node';
const vitest = await createVitest(
'test',
{}, // tesztkonfiguráció felülírása
{}, // Vite konfiguráció felülírása
{} // egyéni Vitest opciók
);
// akkor hívódik meg, amikor a `vitest.cancelCurrentRun()`-t meghívják
vitest.onCancel(() => {});
// a `vitest.close()` hívásakor hívódik meg
vitest.onClose(() => {});
// akkor hívódik meg, amikor a Vitest újra futtatja a tesztfájlokat
vitest.onTestsRerun(files => {});
try {
// ez 1-re állítja a process.exitCode-ot, ha a tesztek sikertelenek,
// és nem zárja be automatikusan a folyamatot
await vitest.start(['my-filter']);
} catch (err) {
// ez hibát dobhat
// "FilesNotFoundError" ha fájlok nem találhatók
// "GitNotFoundError" `--changed` esetén, ha a tárhely nincs inicializálva
} finally {
await vitest.close();
}
Ha meg szeretné tartani a Vitest
példányt, győződjön meg róla, hogy legalább meghívja az init
metódust. Ez inicializálja a riportereket és a lefedettségi szolgáltatót, de nem futtat teszteket. Ajánlott a watch
mód engedélyezése is, még akkor is, ha nem kívánja használni a Vitest figyelőjét, de szeretné, ha a példány futásban maradna. A Vitest erre a jelzőre támaszkodik bizonyos funkcióinak helyes működéséhez egy folyamatos környezetben.
Miután a riporterek inicializálva lettek, használja a runTestSpecifications
vagy rerunTestSpecifications
metódusokat a tesztek futtatásához, ha manuális futtatás szükséges:
watcher.on('change', async file => {
const specifications = vitest.getModuleSpecifications(file);
if (specifications.length) {
vitest.invalidateFile(file);
// használhatja a runTestSpecifications-t, ha a "reporter.onWatcher*" hookokat
// nem kell meghívni
await vitest.rerunTestSpecifications(specifications);
}
});
WARNING
A fenti példa egy lehetséges felhasználási esetet mutat be az alapértelmezett figyelő viselkedés letiltása esetén. Alapértelmezetten a Vitest már automatikusan újra futtatja a teszteket, ha a fájlok megváltoznak.
Vegye figyelembe azt is, hogy a getModuleSpecifications
nem fogja feloldani a tesztfájlokat, hacsak a globTestSpecifications
korábban nem dolgozta fel őket. Ha a fájl éppen most került létrehozásra, használja helyette a project.matchesGlobPattern
metódust:
watcher.on('add', async file => {
const specifications = [];
for (const project of vitest.projects) {
if (project.matchesGlobPattern(file)) {
specifications.push(project.createSpecification(file));
}
}
if (specifications.length) {
await vitest.rerunTestSpecifications(specifications);
}
});
Azokban az esetekben, amikor le kell tiltania a figyelőt, a Vite 5.3 óta átadhatja a server.watch: null
értéket, vagy a server.watch: { ignored: ['*/*'] }
értéket egy Vite konfigurációnak:
await createVitest(
'test',
{},
{
plugins: [
{
name: 'stop-watcher',
async configureServer(server) {
await server.watcher.close();
},
},
],
server: {
watch: null,
},
}
);