Rozšíření Matcherů
Jelikož je Vitest kompatibilní s Chai i Jest, můžete pro rozšíření matcherů použít buď API chai.use, nebo expect.extend, podle vaší preference.
Tato příručka se zaměřuje na rozšíření matcherů pomocí expect.extend. Pokud vás zajímá API Chai, podívejte se na jejich příručku.
Pro rozšíření výchozích matcherů zavolejte expect.extend s objektem obsahujícím vaše vlastní matchery.
expect.extend({
toBeFoo(received, expected) {
const { isNot } = this;
return {
// Neměňte hodnotu "pass" na základě isNot. Vitest to zpracuje automaticky.
pass: received === 'foo',
message: () => `${received} is${isNot ? ' not' : ''} foo`,
};
},
});Pokud používáte TypeScript, můžete rozšířit výchozí rozhraní Assertion v souboru s globální deklarací (např. vitest.d.ts) pomocí níže uvedeného kódu:
import '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 soubor s globální deklarací do vašeho tsconfig.json.
Návratová hodnota matcheru by měla být kompatibilní s následujícím rozhraním:
interface ExpectationResult {
pass: boolean;
message: () => string;
// Pokud tyto hodnoty předáte, automaticky se objeví v diffu, když
// matcher selže, takže nemusíte diff tisknout sami.
actual?: unknown;
expected?: unknown;
}WARNING
Pokud vytváříte asynchronní matcher, nezapomeňte počkat na výsledek pomocí await (await expect('foo').toBeFoo()) přímo v testu.
První argument uvnitř funkce matcheru je přijatá hodnota (ta uvnitř expect(received)). Zbytek jsou argumenty předané přímo matcheru.
Funkce matcheru má přístup k this kontextu s následujícími vlastnostmi:
isNotVrátí
true, pokud byl matcher volán snot(expect(received).not.toBeFoo()).promisePokud byl matcher volán s modifikátorem
resolvedneborejected, tato hodnota bude obsahovat název tohoto modifikátoru. Jinak bude prázdný řetězec.equalsToto je pomocná funkce, která vám umožňuje porovnávat dvě hodnoty. Vrátí
true, pokud jsou hodnoty stejné,falsejinak. Tato funkce se interně používá pro většinu matcherů. Ve výchozím nastavení podporuje objekty s asymetrickými matchery.utilsObsahuje sadu pomocných funkcí, které můžete použít k zobrazení zpráv.
Kontext this také obsahuje informace o aktuálním testu, které lze získat i voláním expect.getState(). Nejužitečnější vlastnosti jsou:
currentTestNameCelý název aktuálního testu (včetně bloku describe).
testPathCesta k aktuálnímu testu.