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.exclude
a reguláris tesztfájlok megtalálásáhoztest.includeSource
,test.exclude
a forráskódban lévő tesztek megtalálásáhoztest.typecheck.include
,test.typecheck.exclude
a 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ítva
import
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.