Rozšíření matcherů/porovnávačů
Protože je Vitest kompatibilní s Chai i Jest, můžete použít buď API chai.use, nebo expect.extend, podle toho, co vám více vyhovuje.
Tento návod se zaměří na rozšíření porovnávačů pomocí expect.extend. Pokud vás zajímá API Chai, podívejte se na jejich dokumentaci.
Pro rozšíření výchozích porovnávačů zavolejte expect.extend s objektem obsahujícím vaše vlastní porovnávače.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// Neměňte "pass" na základě isNot. Vitest to udělá za vás.
pass: received === 'foo',
message: () => `${received} is${isNot ? ' not' : ''} foo`,
};
},
});Pokud používáte TypeScript, můžete od verze Vitest 0.31.0 rozšířit výchozí rozhraní Assertion v deklaračním souboru (např.: vitest.d.ts) pomocí následujícího kódu:
import type { Assertion, AsymmetricMatchersContaining } from 'vitest';
interface CustomMatchers<R = unknown> {
toBeFoo: () => R;
}
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
interface AsymmetricMatchersContaining extends CustomMatchers {}
}WARNING
Nezapomeňte zahrnout deklarační soubor do svého tsconfig.json.
Návratová hodnota porovnávače by měla být kompatibilní s následujícím rozhraním:
interface MatcherResult {
pass: boolean;
message: () => string;
// Pokud je zadáte, automaticky se zobrazí v diffu, když
// porovnávač neprojde, takže nemusíte diff vypisovat sami.
actual?: unknown;
expected?: unknown;
}WARNING
Pokud vytváříte asynchronní porovnávač, nezapomeňte použít await pro výsledek (await expect('foo').toBeFoo()) v samotném testu.
První argument uvnitř funkce porovnávače je přijatá hodnota (ta v expect(received)). Zbytek jsou argumenty předané přímo do porovnávače.
Matcher funkce má přístup ke kontextu this s následujícími vlastnostmi:
isNotVrací
true, pokud byl porovnávač volán s modifikátoremnot(expect(received).not.toBeFoo()).promisePokud byl porovnávač volán s modifikátorem
resolvedneborejected, tato hodnota bude obsahovat název modifikátoru. Jinak to bude prázdný řetězec.equalsJedná se o pomocnou funkci, která umožňuje porovnání dvou hodnot. Vrátí
true, pokud jsou hodnoty shodné, jinakfalse. Tato funkce se interně používá pro téměř každý porovnávač. Ve výchozím nastavení podporuje objekty s asymetrickými porovnávači.utilsObsahuje sadu pomocných funkcí, které můžete použít pro formátování zpráv.
Kontext this také obsahuje informace o aktuálním testu. Tyto informace můžete také získat voláním expect.getState(). Nejužitečnější vlastnosti jsou:
currentTestNameÚplný název aktuálního testu (včetně názvů bloků
describe).testPathCesta k souboru s aktuálním testem.