Skip to content
Vitest 1
Main Navigation PrzewodnikAPIKonfiguracjaZaawansowany
1.6.1
0.34.6

Polski

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

Polski

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

Wygląd

Sidebar Navigation

Przewodnik

Dlaczego Vitest

Wprowadzenie

Funkcje

Przestrzeń robocza

Interfejs Linii Poleceń

Filtrowanie Testów

Reportery

Pokrycie kodu

Snapshot

Mockowanie

Testowanie typów

Interfejs użytkownika Vitest

Tryb przeglądarki

Testowanie w kodzie źródłowym

Kontekst Testowy

Środowisko Testowe

Rozszerzanie Matcherów

Integracje z IDE

Debugowanie

Porównania z innymi narzędziami do uruchamiania testów

Przewodnik migracji

Częste błędy

Poprawa wydajności

API

Dokumentacja API Testów

Funkcje Mockujące

Vi

expect

expectTypeOf

assert

assertType

Konfiguracja

Zarządzanie plikiem konfiguracyjnym Vitest

Konfiguracja Vitest

Na tej stronie

Rozszerzanie Matcherów ​

Ponieważ Vitest jest kompatybilny zarówno z Chai, jak i Jest, możesz użyć API chai.use lub expect.extend, w zależności od preferencji.

W tym przewodniku pokażemy, jak rozszerzać matchery za pomocą expect.extend. Jeśli interesuje Cię API Chai, zapoznaj się z ich przewodnikiem.

Aby rozszerzyć standardowe matchery, wywołaj expect.extend z obiektem zawierającym Twoje własne matchery.

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // Nie zmieniaj wartości 'pass' w zależności od isNot. Vitest robi to automatycznie.
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

Jeśli używasz TypeScript, od Vitest 0.31.0 możesz rozszerzyć domyślny interfejs Assertion w pliku deklaracji ambient (np. vitest.d.ts) za pomocą poniższego kodu:

ts
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

Pamiętaj, aby dołączyć plik deklaracji ambient do swojego tsconfig.json.

Wartość zwracana przez matcher powinna być zgodna z następującym interfejsem:

ts
interface MatcherResult {
  pass: boolean;
  message: () => string;
  // Jeśli je przekażesz, automatycznie pojawią się w różnicy, gdy
  // matcher nie przejdzie, więc nie musisz sam drukować różnic.
  actual?: unknown;
  expected?: unknown;
}

WARNING

Jeśli tworzysz matcher asynchroniczny, nie zapomnij użyć await na wyniku (await expect('foo').toBeFoo()) w samym teście jednostkowym.

Pierwszym argumentem funkcji matchera jest wartość otrzymana (ta przekazana do expect(received)). Pozostałe argumenty są przekazywane bezpośrednio do matchera.

Funkcja matchera ma dostęp do kontekstu this z następującymi właściwościami:

  • isNot

    Zwraca true, jeśli matcher został wywołany z użyciem not (expect(received).not.toBeFoo()).

  • promise

    Jeśli matcher został wywołany na resolved/rejected, ta wartość będzie zawierała nazwę modyfikatora. W przeciwnym razie będzie to pusty string.

  • equals

    Jest to funkcja pomocnicza, która pozwala porównać dwie wartości. Zwróci true, jeśli wartości są równe, false w przeciwnym razie. Ta funkcja jest używana wewnętrznie przez większość matcherów. Domyślnie obsługuje obiekty z asymetrycznymi matcherami.

  • utils

    Zawiera zestaw funkcji pomocniczych, których możesz użyć do formatowania komunikatów.

Kontekst this zawiera także informacje o bieżącym teście. Możesz go również uzyskać, wywołując expect.getState(). Najbardziej przydatne właściwości to:

  • currentTestName

    Pełna nazwa bieżącego testu (wraz z blokami describe).

  • testPath

    Ścieżka do pliku z bieżącym testem.

Pager
Poprzednia stronaŚrodowisko Testowe
Następna stronaIntegracje z IDE

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

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

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors