TestProject 3.0.0+
WARNING
Ez az útmutató a haladó Node.js API-t ismerteti. Ha csak projekteket szeretne definiálni, kövesse a "Teszt Projektek" útmutatót.
name
A név egy egyedi karakterlánc, amelyet a felhasználó ad meg, vagy amelyet a Vitest kikövetkeztet. Ha a felhasználó nem adott meg nevet, a Vitest megpróbál betölteni egy package.json fájlt a projekt gyökerében, és onnan veszi a name tulajdonságot. Ha nincs package.json, a Vitest alapértelmezés szerint a mappa nevét használja. Az inline projektek számokat használnak névként (karakterlánccá alakítva).
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test');
vitest.projects.map(p => p.name) === ['@pkg/server', 'utils', '2', 'custom'];import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: [
'./packages/server', // `package.json` fájlt tartalmaz "@pkg/server" névvel
'./utils', // nincs package.json fájl
{
// a név nincs testreszabva
test: {
pool: 'threads',
},
},
{
// egyéni névvel
test: {
name: 'custom',
},
},
],
},
});INFO
Ha a gyökérprojekt nem része a felhasználói projekteknek, a name tulajdonsága nem lesz feloldva.
vitest
A vitest a globális Vitest folyamatra hivatkozik.
serializedConfig
Ez az a konfiguráció, amelyet a tesztfolyamatok kapnak. A Vitest manuálisan szerializálja a konfigurációt azáltal, hogy eltávolítja az összes nem szerializálható függvényt és tulajdonságot. Mivel ez az érték mind a tesztekben, mind a Node.js környezetben elérhető, a típusa a fő belépési pontból van exportálva.
import type { SerializedConfig } from 'vitest';
const config: SerializedConfig = vitest.projects[0].serializedConfig;WARNING
A serializedConfig tulajdonság egy getter. Minden hozzáféréskor a Vitest újra szerializálja a konfigurációt, ha az megváltozott. Ez azt is jelenti, hogy mindig más referenciát ad vissza:
project.serializedConfig === project.serializedConfig; // ❌globalConfig
A tesztkonfiguráció, amellyel a Vitest inicializálva lett. Ha ez a gyökérprojekt, a globalConfig és a config ugyanarra az objektumra hivatkozik. Ez a konfiguráció olyan értékekhez hasznos, amelyek nem állíthatók be projekt szinten, mint például a coverage vagy a reporters.
import type { ResolvedConfig } from 'vitest/node';
vitest.config === vitest.projects[0].globalConfig;config
Ez a projekt feloldott tesztkonfigurációja.
hash 3.2.0+
A projekt egyedi hash-je. Ez az érték következetes az újrafuttatások során.
A projekt gyökérkönyvtárán és nevén alapul. Vegye figyelembe, hogy a gyökérútvonal nem egységes a különböző operációs rendszerek között, így a hash is eltérő lesz.
vite
Ez a projekt ViteDevServer példánya. Minden projektnek saját Vite szervere van.
browser
Ez az érték csak akkor kap értéket, ha a tesztek böngészőben futnak. Ha a browser engedélyezve van, de a tesztek még nem futottak le, akkor ez undefined lesz. Ha ellenőrizni szeretné, hogy a projekt támogatja-e a böngésző teszteket, használja a project.isBrowserEnabled() metódust.
WARNING
A böngésző API még kísérleti fázisban van, és nem követi a SemVer szabályait. A böngésző API-t a többi API-tól elkülönítve fogják szabványosítani.
provide
function provide<T extends keyof ProvidedContext & string>(
key: T,
value: ProvidedContext[T]
): void;Egy módja annak, hogy egyéni értékeket biztosítsunk a teszteknek a config.provide mezőn kívül. Minden érték érvényesítésre kerül a structuredClone segítségével, mielőtt tárolásra kerülnének, de a providedContext értékei önmagukban nem klónozódnak.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test');
const project = vitest.projects.find(p => p.name === 'custom');
project.provide('key', 'value');
await vitest.start();import { inject } from 'vitest';
const value = inject('key');Az értékek dinamikusan is megadhatók. A tesztekben megadott érték a következő futtatáskor frissül.
TIP
Ez a metódus a globális beállítási fájlok számára is elérhető olyan esetekben, amikor a nyilvános API nem használható:
export default function setup({ provide }) {
provide('wsPort', 3000);
}getProvidedContext
function getProvidedContext(): ProvidedContext;Ez a kontextus objektumot adja vissza. Minden projekt örökli a vitest.provide által beállított globális kontextust is.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test');
vitest.provide('global', true);
const project = vitest.projects.find(p => p.name === 'custom');
project.provide('key', 'value');
// { global: true, key: 'value' }
const context = project.getProvidedContext();TIP
A projektkontextus értékei mindig felülírják a gyökérprojekt kontextusában lévő értékeket.
createSpecification
function createSpecification(
moduleId: string,
locations?: number[]
): TestSpecification;Hozzon létre egy teszt specifikációt, amely felhasználható a vitest.runTestSpecifications metódussal. A specifikáció a tesztfájlt egy adott project-re és teszt locations-re (opcionális) határolja be. A teszt helyek azok a kódsorok, ahol a teszt a forráskódban definiálva van. Ha helyek vannak megadva, a Vitest csak azokon a sorokon definiált teszteket futtatja. Vegye figyelembe, hogy ha a testNamePattern definiálva van, akkor az is alkalmazásra kerül.
import { createVitest } from 'vitest/node';
import { resolve } from 'node:path/posix';
const vitest = await createVitest('test');
const project = vitest.projects[0];
const specification = project.createSpecification(
resolve('./example.test.ts'),
[20, 40] // opcionális tesztsorok
);
await vitest.runTestSpecifications([specification]);WARNING
A createSpecification feloldott modul ID-t vár. Nem oldja fel automatikusan a fájlt, és nem ellenőrzi a fájlrendszeren való létezését.
Azt is vegye figyelembe, hogy a project.createSpecification mindig új példányt ad vissza.
isRootProject
function isRootProject(): boolean;Ellenőrzi, hogy az aktuális projekt a gyökérprojekt-e. A gyökérprojektet a vitest.getRootProject() hívásával is lekérdezheti.
globTestFiles
function globTestFiles(filters?: string[]): {
/**
* A szűrőknek megfelelő tesztfájlok.
*/
testFiles: string[];
/**
* A szűrőknek megfelelő típusellenőrző tesztfájlok. Ez üres lesz, hacsak a `typecheck.enabled` nem `true`.
*/
typecheckTestFiles: string[];
};Felkutatja az összes tesztfájlt. Ez a függvény egy objektumot ad vissza, amely reguláris teszteket és típusellenőrző teszteket tartalmaz.
Ez a metódus filters-t fogad el. A szűrők csak a fájlútvonal egy részét képezhetik, ellentétben a Vitest példány más metódusaival:
project.globTestFiles(['foo']); // ✅
project.globTestFiles(['basic/foo.js:10']); // ❌TIP
A Vitest a fast-glob csomagot használja a tesztfájlok megtalálásához. A test.dir, test.root, root vagy process.cwd() határozza meg a cwd opciót.
Ez a metódus több konfigurációs opciót is figyelembe vesz:
test.include,test.excludea reguláris tesztfájlok megtalálásáhoztest.includeSource,test.excludea forráskódban lévő tesztek megtalálásáhoztest.typecheck.include,test.typecheck.excludea típusellenőrző tesztek megtalálásához
matchesTestGlob
function matchesTestGlob(moduleId: string, source?: () => string): boolean;Ez a metódus ellenőrzi, hogy a fájl reguláris tesztfájl-e. Ugyanazokat a konfigurációs tulajdonságokat használja, amelyeket a globTestFiles használ az érvényesítéshez.
Ez a metódus egy második paramétert is elfogad, amely a forráskód. Ez arra szolgál, hogy ellenőrizze, hogy a fájl forráskódban lévő teszt-e. Ha ezt a metódust többször hívja meg több projekthez, javasolt a fájlt egyszer elolvasni és közvetlenül átadni. Ha a fájl nem tesztfájl, de illeszkedik az includeSource glob mintához, a Vitest szinkron módon olvassa be a fájlt, hacsak a source nincs megadva.
import { createVitest } from 'vitest/node';
import { resolve } from 'node:path/posix';
const vitest = await createVitest('test');
const project = vitest.projects[0];
project.matchesTestGlob(resolve('./basic.test.ts')); // true
project.matchesTestGlob(resolve('./basic.ts')); // false
project.matchesTestGlob(
resolve('./basic.ts'),
() => `
if (import.meta.vitest) {
// ...
}
`
); // true, ha az `includeSource` be van állítvaimport
function import<T>(moduleId: string): Promise<T>Fájl importálása Vite modul futtatóval. A fájlt a Vite a megadott projekt konfigurációjával alakítja át, és külön kontextusban hajtja végre. Vegye figyelembe, hogy a moduleId relatív lesz a config.root-hoz képest.
DANGER
A project.import újrahasznosítja a Vite modulgráfját, így ugyanazon modul reguláris importálással történő importálása eltérő modult eredményez:
import * as staticExample from './example.js';
const dynamicExample = await project.import('./example.js');
dynamicExample !== staticExample; // ✅INFO
Belsőleg a Vitest ezt a metódust használja a globális beállítások, egyéni lefedettségi szolgáltatók és egyéni jelentéskészítők importálására, ami azt jelenti, hogy mindannyian ugyanazt a modulgráfot használják, amíg ugyanahhoz a Vite szerverhez tartoznak.
onTestsRerun
function onTestsRerun(cb: OnTestsRerunHandler): void;Ez a project.vitest.onTestsRerun rövidített formája. Egy visszahívást fogad el, amelyre akkor várnak, amikor a teszteket újra futtatásra ütemezték (általában fájlváltozás miatt).
project.onTestsRerun(specs => {
console.log(specs);
});isBrowserEnabled
function isBrowserEnabled(): boolean;true értéket ad vissza, ha ez a projekt böngészőben futtat teszteket.
close
function close(): Promise<void>;Lezárja a projektet és az összes kapcsolódó erőforrását. Ez csak egyszer hívható meg; a bezárási promise gyorsítótárazva van a szerver újraindításáig. Ha az erőforrásokra ismét szükség van, hozzon létre egy új projektet.
Részletesebben, ez a metódus bezárja a Vite szervert, leállítja a típusellenőrző szolgáltatást, bezárja a böngészőt, ha fut, törli a forráskódot tartalmazó ideiglenes könyvtárat, és visszaállítja a megadott kontextust.