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.