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:
isNot
Vrátí
true
, pokud byl matcher volán snot
(expect(received).not.toBeFoo()
).promise
Pokud byl matcher volán s modifikátorem
resolved
neborejected
, tato hodnota bude obsahovat název tohoto modifikátoru. Jinak bude prázdný řetězec.equals
Toto je pomocná funkce, která vám umožňuje porovnávat dvě hodnoty. Vrátí
true
, pokud jsou hodnoty stejné,false
jinak. Tato funkce se interně používá pro většinu matcherů. Ve výchozím nastavení podporuje objekty s asymetrickými matchery.utils
Obsahuje 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:
currentTestName
Celý název aktuálního testu (včetně bloku describe).
testPath
Cesta k aktuálnímu testu.