Skip to content
Vitest 2
Main Navigation PrůvodceAPIKonfiguraceRežim prohlížečePokročilý
2.1.9
1.6.1
0.34.6

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

Vzhled

Sidebar Navigation

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Profiling Test Performance

Zvýšení výkonu

Na této stránce

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.

ts
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:

ts
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:

ts
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 s not (expect(received).not.toBeFoo()).

  • promise

    Pokud byl matcher volán s modifikátorem resolved nebo rejected, 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.

Pager
Předchozí stránkaTestovací prostředí
Další stránkaIntegrace do IDE

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/extending-matchers

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors