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:
isNot
Vrací
true
, pokud byl porovnávač volán s modifikátoremnot
(expect(received).not.toBeFoo()
).promise
Pokud byl porovnávač volán s modifikátorem
resolved
neborejected
, tato hodnota bude obsahovat název modifikátoru. Jinak to bude prázdný řetězec.equals
Jedná 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.utils
Obsahuje 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
).testPath
Cesta k souboru s aktuálním testem.