Feladat Metaadatok
WARNING
A Vitest kísérleti, privát API-t kínál. A kompatibilitástörő változások nem feltétlenül követik a szemantikus verziózást (semver), ezért kérjük, rögzítse a Vitest verzióját, amikor használja.
Ha egyedi riportálót fejleszt, vagy a Vitest Node.js API-ját használja, hasznos lehet adatokat átadni a különböző kontextusokban végrehajtott tesztekből a riportálónak vagy az egyedi Vitest kezelőnek.
Ennek elérésére a tesztkörnyezet használata nem megfelelő, mivel az nem szerializálható. A Vitesttel azonban felhasználhatja a meta
tulajdonságot, amely minden feladaton (tesztcsoportban vagy teszten) elérhető, hogy adatokat osszon meg a tesztek és a Node.js folyamat között. Fontos megjegyezni, hogy ez a kommunikáció csak egyirányú, mivel a meta
tulajdonság csak a tesztkörnyezeten belülről módosítható. A Node.js környezetben végzett bármilyen módosítás nem lesz látható a tesztekben.
A meta
tulajdonságot beállíthatja a tesztkörnyezetben vagy a beforeAll
/afterAll
hook-okon belül a tesztcsoport feladataihoz.
afterAll((suite) => {
suite.meta.done = true
})
test('custom', ({ task }) => {
task.meta.custom = 'some-custom-handler'
})
A teszt befejezése után a Vitest RPC használatával elküldi a Node.js folyamatnak a feladatot, annak eredményét és a meta
adatokat. A feladat elfogásához és feldolgozásához használhatja az onTaskUpdate
metódust, amely elérhető a riportáló implementációjában.
// custom-reporter.js
export default {
// szükség esetén elfoghatja a *csomagokat*
onTaskUpdate(packs) {
const [id, result, meta] = packs[0]
},
// a meta minden feladaton elérhető az "onFinished" során
onFinished(files) {
files[0].meta.done === true
files[0].tasks[0].meta.custom === 'some-custom-handler'
}
}
WARNING
A Vitest egyszerre több feladatot is küldhet, ha több teszt is rövid időn belül befejeződik.
VIGYÁZAT
A Vitest különböző módszereket használ a Node.js folyamattal való kommunikációra.
- Ha a Vitest worker szálakon futtat teszteket, az adatokat üzenetporton keresztül küldi.
- Ha a Vitest gyermekfolyamatot használ, az adatokat szerializált Bufferként küldi el a
process.send
API-n keresztül. - Ha a Vitest a böngészőben futtat teszteket, az adatokat a flatted csomag segítségével stringifikálja.
Általános szabályként szinte bármit elküldhet, kivéve a függvényeket, a Promise-eket és a reguláris kifejezéseket. A v8.stringify
függvény nem tudja szerializálni a reguláris kifejezéseket, de elküldheti a string verziójukat, és elemezheti azokat a Node.js folyamatban. Más nem szerializálható adatokat sem küldhet, de lehetnek benne ciklikus hivatkozások.
Továbbá, a beállításuk előtt győződjön meg róla, hogy szerializálja a Hiba tulajdonságokat.
Ezek az információk a Vitest állapotából is lekérhetők a tesztek futásának befejezése után:
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'
TypeScript használata esetén a típusdefiníciók kiterjesztése is lehetséges:
declare module 'vitest' {
interface TaskMeta {
done?: boolean
custom?: string
}
}