Feladat metaadatok
WARNING
A Vitest kísérleti jellegű privát API-t biztosít. A kompatibilitástörő változások nem mindig követik a SemVer-t, ezért kérjük, rögzítse a Vitest verzióját, amikor ezt az API-t használja.
Ha egyéni riportot fejleszt, vagy a Vitest Node.js API-t használja, hasznos lehet, ha adatokat ad át a különböző kontextusokban futó tesztekből a riportjának vagy egyéni Vitest kezelőjének.
Ennek megvalósításához a tesztkontextusra támaszkodni nem lehetséges, mivel az nem szerializálható. A Vitest azonban minden feladaton (csomag vagy teszt) elérhető meta
tulajdonságot használhat az adatok megosztására a tesztek és a Node.js folyamat között. Fontos tudni, hogy ez a kommunikáció csak egyirányú, mivel a meta
tulajdonság csak a tesztkontextuson belül módosítható. A Node.js kontextusban végzett bármilyen módosítás nem lesz látható a tesztekben.
A meta
tulajdonságot a tesztkontextuson vagy a beforeAll
/afterAll
hookokon belül töltheti fel a tesztcsomag feladatokhoz.
afterAll(suite => {
suite.meta.done = true;
});
test('custom', ({ task }) => {
task.meta.custom = 'some-custom-handler';
});
Miután egy teszt befejeződött, a Vitest elküld egy feladatot, amely tartalmazza az eredményt és a meta
adatokat a Node.js folyamatnak RPC-n keresztül, majd jelenti azt az onTestCaseResult
és más hook-okban, amelyek hozzáférnek a feladatokhoz. A teszteset feldolgozásához használhatja a riporter implementációjában elérhető onTestCaseResult
metódust:
import type { Reporter, TestCase, TestModule } from 'vitest/node';
export default {
onTestCaseResult(testCase: TestCase) {
// custom === 'some-custom-handler' ✅
const { custom } = testCase.meta();
},
onTestRunEnd(testModule: TestModule) {
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';
},
} satisfies Reporter;
VIGYÁZAT
A Vitest különböző módszereket használ a Node.js folyamattal való kommunikációra.
- Ha a Vitest worker thread-eken belül futtat teszteket, az adatokat üzenetporton keresztül küldi el.
- Ha a Vitest child process-t használ, az adatok szerializált Buffer-ként kerülnek elküldésre a
process.send
API-n keresztül. - Ha a Vitest böngészőben futtat teszteket, az adatok a flatted csomaggal lesznek stringgé konvertálva.
Ez a tulajdonság minden tesztben jelen van a json
riportban is, ezért győződjön meg róla, hogy az adatok JSON formátumba szerializálhatók.
Ellenőrizze azt is, hogy szerializálja az Error tulajdonságokat, mielőtt beállítja őket.
Ezt az információt a Vitest állapotán keresztül is elérheti, amikor a tesztek befejezték a futást:
const vitest = await createVitest('test');
const { testModules } = await vitest.start();
const testModule = testModules[0];
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';
Lehetőség van a típusdefiníciók kiterjesztésére is TypeScript használatakor:
declare module 'vitest' {
interface TaskMeta {
done?: boolean;
custom?: string;
}
}