Skip to content
Vitest 3
Main Navigation Przewodnik & APIKonfiguracjaTryb przeglądarkiZaawansowane API
3.2.0
2.1.9
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

Wprowadzenie

Dlaczego Vitest

Pierwsze kroki

Funkcje

Konfiguracja Vitest

API

Dokumentacja API testowego

Funkcje Mock

Vi

expect

expectTypeOf

assert

assertType

Przewodnik

Interfejs Wiersza Poleceń

Filtrowanie testów

Projekty testowe

Reportery

Pokrycie kodu

Migawki

Mockowanie

Równoległość

Typy testów

Interfejs użytkownika Vitest

Testy w kodzie źródłowym

Kontekst Testu

Adnotacje testowe

Środowisko testowe

Rozszerzanie matcherów

Integracje z IDE

Debugowanie

Typowe błędy

Przewodnik migracji

Migracja do Vitest 3.0

Migracja z Jest

Wydajność

Profilowanie wydajności testów

Poprawa wydajności

Tryb przeglądarkowy

Zaawansowane API

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

Na tej stronie

Rozszerzanie matcherów ​

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

Ten przewodnik omówi rozszerzanie matcherów za pomocą expect.extend. Jeśli interesuje Cię API Chai, sprawdź ich przewodnik.

Aby rozszerzyć domyślne matchery, należy wywołać expect.extend z obiektem zawierającym Twoje niestandardowe 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 za Ciebie.
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

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

ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Matchers<T = any> extends CustomMatchers<T> {}
}
ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Assertion<T = any> extends CustomMatchers<T> {}
  interface AsymmetricMatchersContaining extends CustomMatchers {}
}

TIP

Od Vitest 3.2, możesz rozszerzyć interfejs Matchers, aby uzyskać bezpieczeństwo typów dla asercji w metodach expect.extend, expect().* i expect.* jednocześnie. Wcześniej wymagane było definiowanie oddzielnych interfejsów dla każdej z nich.

WARNING

Nie zapomnij dołączyć pliku deklaracji środowiskowej do swojego tsconfig.json.

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

ts
interface ExpectationResult {
  pass: boolean;
  message: () => string;
  // Jeśli je podasz, automatycznie pojawią się w raporcie różnic, gdy
  // matcher nie przejdzie, więc nie musisz samodzielnie wyświetlać różnic.
  actual?: unknown;
  expected?: unknown;
}

WARNING

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

ts
expect.extend({
  async toBeAsyncAssertion() {
    // ...
  },
});

await expect().toBeAsyncAssertion();

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

Funkcja matchera ma dostęp do kontekstu this, który zawiera następujące właściwości:

isNot ​

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

promise ​

Jeśli matcher został wywołany z modyfikatorem resolved lub rejected, ta wartość będzie zawierać nazwę modyfikatora. W przeciwnym razie będzie to pusty ciąg znaków.

equals ​

Jest to funkcja pomocnicza, która pozwala porównywać dwie wartości. Zwróci true, jeśli wartości są równe, false w przeciwnym wypadku. Ta funkcja jest używana wewnętrznie dla prawie każdego matchera. Domyślnie obsługuje obiekty z asymetrycznymi matcherami.

utils ​

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

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

currentTestName ​

Pełna nazwa bieżącego testu (łącznie z blokiem describe).

testPath ​

Ścieżka do pliku bieżącego testu.

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

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team

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

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team