Matcherek kiterjesztése
Mivel a Vitest kompatibilis mind a Chai-jal, mind a Jest-tel, használhatja a chai.use API-t vagy az expect.extend metódust, attól függően, hogy melyiket részesíti előnyben.
Ez az útmutató a matcherek expect.extend metódussal történő kiterjesztését tárgyalja. Ha a Chai API-ja érdekli, tekintse meg az ő útmutatójukat.
Az alapértelmezett matcherek kiterjesztéséhez hívja meg az expect.extend metódust egy objektummal, amely a matchereket tartalmazza.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// ne módosítsa a "pass" értékét az isNot alapján. A Vitest ezt megteszi Ön helyett
pass: received === 'foo',
message: () => `${received} is${isNot ? ' not' : ''} foo`,
};
},
});Ha TypeScriptet használ, kiterjesztheti az alapértelmezett Assertion interfészt egy környezeti deklarációs fájlban (pl. vitest.d.ts) az alábbi kódrészlettel:
import 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Matchers<T = any> extends CustomMatchers<T> {}
}import 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}TIP
Vitest 3.2 óta kiterjesztheti a Matchers interfészt, hogy típusbiztos állításokat használhasson az expect.extend, expect().* és expect.* metódusokban egyszerre. Korábban külön interfészeket kellett definiálni mindegyikhez.
WARNING
Ne felejtse el belefoglalni a környezeti deklarációs fájlt a tsconfig.json-ba.
A matcher visszatérési értékének kompatibilisnek kell lennie a következő interfésszel:
interface ExpectationResult {
pass: boolean;
message: () => string;
// Ha ezeket átadja, automatikusan megjelennek egy diff nézetben, amikor
// a matcher nem felel meg, így nem kell Önnek külön megjelenítenie a különbséget
actual?: unknown;
expected?: unknown;
}WARNING
Ha aszinkron matchert hoz létre, ne felejtse el az await kulcsszót használni az eredmény megvárásához (await expect('foo').toBeFoo()) magában a tesztben:
expect.extend({
async toBeAsyncAssertion() {
// ...
},
});
await expect().toBeAsyncAssertion();A matcher függvény első argumentuma a kapott érték (az, ami az expect(received)-ben szerepel). A többi argumentum közvetlenül a matchernek átadott argumentum.
A matcher függvény hozzáfér a this kontextushoz a következő tulajdonságokkal:
isNot
Igaz értéket ad vissza, ha a matchert a not módosítóval hívták meg (expect(received).not.toBeFoo()).
promise
Ha a matchert resolved vagy rejected módosítóval hívták meg, ez az érték tartalmazza a módosító nevét. Ellenkező esetben üres karakterláncot ad vissza.
equals
Ez egy segédfüggvény, amely lehetővé teszi két érték összehasonlítását. true értéket ad vissza, ha az értékek egyenlőek, egyébként false értéket. Ezt a függvényt belsőleg szinte minden matcher használja. Alapértelmezés szerint támogatja az aszimmetrikus matchereket tartalmazó objektumokat.
utils
Ez számos segédfüggvényt tartalmaz, amelyeket üzenetek megjelenítésére használhat.
A this kontextus tartalmazza az aktuális tesztről szóló információkat is. Ezt az expect.getState() hívásával is lekérheti. A leghasznosabb tulajdonságok a következők:
currentTestName
Az aktuális teszt teljes neve (beleértve a describe blokkot is).
testPath
Az aktuális tesztfájl elérési útja.