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 preferálja.
Ez az útmutató a matcherek expect.extend
metódussal történő kiterjesztését mutatja be. 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 olyan objektummal, amely tartalmazza az illesztőket.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// ne módosítsa a "pass" értékét az isNot alapján. A Vitest automatikusan kezeli.
pass: received === 'foo',
message: () => `${received} is${isNot ? ' not' : ''} foo`,
};
},
});
Ha TypeScriptet használ, kiterjesztheti az alapértelmezett Assertion
interfészt egy környezetdeklarációs fájlban (például vitest.d.ts
). Az alábbi kódot használja:
import 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}
WARNING
Ne felejtse el hozzáadni a környezetdeklarációs fájlt a tsconfig.json
fájlhoz.
A matcher visszatérési értékének a következő interfésszel kell kompatibilisnek lennie:
interface ExpectationResult {
pass: boolean;
message: () => string;
// Ha ezeket átadja, automatikusan megjelennek egy diffben, amikor
// a matcher nem teljesül, így nem kell manuálisan megjelenítenie a diffet
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.
A matcher függvény első argumentuma a kapott érték (az expect(received)
-ben szereplő érték). A többi argumentum közvetlenül a matchernek kerül átadásra.
A matcher függvény a this
kontextuson keresztül a következő tulajdonságokkal rendelkezik:
isNot
Igazat ad vissza, ha a matchert a
not
módosítóval hívták meg (expect(received).not.toBeFoo()
).promise
Ha a matchert a
resolved
vagyrejected
módosítóval hívták meg, ez az érték tartalmazza a módosító nevét. Ellenkező esetben üres stringet ad vissza.equals
Ez egy segédfüggvény, amely lehetővé teszi két érték összehasonlítását. Igazat ad vissza, ha az értékek egyenlőek, egyébként hamisat. Ezt a függvényt belsőleg szinte minden matcher használja. Alapértelmezés szerint támogatja az aszimmetrikus matchereket tartalmazó objektumok összehasonlítását is.
utils
Ez egy sor segédfüggvényt tartalmaz, amelyeket üzenetek megjelenítésére használhat.
A this
kontextus az aktuális tesztre vonatkozó információkat is tartalmazza. Ezeket az expect.getState()
meghívásával is lekérdezheti. 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.