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

expectTypeOf ​

WARNING

Podczas działania funkcja ta nie robi nic. Aby włączyć sprawdzanie typów, nie zapomnij przekazać flagi --typecheck.

  • Typ: <T>(a: unknown) => ExpectTypeOf

not ​

  • Typ: ExpectTypeOf

Możesz zanegować wszystkie asercje, używając właściwości .not.

toEqualTypeOf ​

  • Typ: <T>(expected: T) => void

Ten dopasowywacz sprawdza, czy typy są identyczne. Nie sprawdza wartości, a jedynie typy. Test nie zakończy się niepowodzeniem, jeśli dwa obiekty mają różne wartości, ale ten sam typ. Natomiast zakończy się niepowodzeniem, jeśli w obiekcie brakuje właściwości.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf({ a: 1 }).toEqualTypeOf<{ a: number }>();
expectTypeOf({ a: 1 }).toEqualTypeOf({ a: 1 });
expectTypeOf({ a: 1 }).toEqualTypeOf({ a: 2 });
expectTypeOf({ a: 1, b: 1 }).not.toEqualTypeOf<{ a: number }>();

toMatchTypeOf ​

  • Typ: <T>(expected: T) => void

Ten dopasowywacz sprawdza, czy typ oczekiwany jest zgodny z podanym typem (tj. czy oczekiwany typ rozszerza podany typ). Działa podobnie do toMatchObject() z expect, a nie do toEqual. Pozwala sprawdzić, czy obiekt "pasuje" do typu.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf({ a: 1, b: 1 }).toMatchTypeOf({ a: 1 });
expectTypeOf<number>().toMatchTypeOf<string | number>();
expectTypeOf<string | number>().not.toMatchTypeOf<number>();

extract ​

  • Typ: ExpectTypeOf<ExtractedUnion>

Możesz użyć .extract, aby zawęzić typy unii do dalszych testów.

ts
import { expectTypeOf } from 'vitest';

type ResponsiveProp<T> = T | T[] | { xs?: T; sm?: T; md?: T };

interface CSSProperties {
  margin?: string;
  padding?: string;
}

function getResponsiveProp<T>(_props: T): ResponsiveProp<T> {
  return {};
}

const cssProperties: CSSProperties = { margin: '1px', padding: '2px' };

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<{ xs?: any }>() // wyodrębnia typ { xs?: any } z unii
  .toEqualTypeOf<{
    xs?: CSSProperties;
    sm?: CSSProperties;
    md?: CSSProperties;
  }>();

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<unknown[]>() // wyodrębnia typ unknown[] z unii
  .toEqualTypeOf<CSSProperties[]>();

WARNING

Jeśli żaden typ z unii nie pasuje do podanego, .extract zwróci never.

exclude ​

  • Typ: ExpectTypeOf<NonExcludedUnion>

Możesz użyć .exclude, aby usunąć typy z unii w celu dalszych testów.

ts
import { expectTypeOf } from 'vitest';

type ResponsiveProp<T> = T | T[] | { xs?: T; sm?: T; md?: T };

interface CSSProperties {
  margin?: string;
  padding?: string;
}

function getResponsiveProp<T>(_props: T): ResponsiveProp<T> {
  return {};
}

const cssProperties: CSSProperties = { margin: '1px', padding: '2px' };

expectTypeOf(getResponsiveProp(cssProperties))
  .exclude<unknown[]>()
  .exclude<{ xs?: unknown }>() // lub po prostu .exclude<unknown[] | { xs?: unknown }>()
  .toEqualTypeOf<CSSProperties>();

WARNING

Jeśli żaden typ z unii nie pasuje do podanego, .exclude zwróci never.

returns ​

  • Typ: ExpectTypeOf<ReturnValue>

Możesz użyć .returns, aby wyodrębnić typ wartości zwracanej przez funkcję.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf((a: number) => [a, a]).returns.toEqualTypeOf([1, 2]);

WARNING

Użycie na typie, który nie jest funkcją, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

parameters ​

  • Typ: ExpectTypeOf<Parameters>

Możesz wyodrębnić typy parametrów funkcji za pomocą .parameters, aby wykonać asercje na ich typach. Parametry są zwracane jako tablica typów.

ts
import { expectTypeOf } from 'vitest';

type NoParam = () => void;
type HasParam = (s: string) => void;

expectTypeOf<NoParam>().parameters.toEqualTypeOf<[]>();
expectTypeOf<HasParam>().parameters.toEqualTypeOf<[string]>();

WARNING

Użycie na typie, który nie jest funkcją, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

TIP

Możesz również użyć dopasowywacza .toBeCallableWith jako bardziej ekspresywnej asercji.

parameter ​

  • Typ: (nth: number) => ExpectTypeOf

Możesz wyodrębnić typ określonego argumentu funkcji za pomocą wywołania .parameter(number), aby wykonać na nim dalsze asercje. number to indeks argumentu (liczony od 0).

ts
import { expectTypeOf } from 'vitest';

function foo(a: number, b: string) {
  return [a, b];
}

expectTypeOf(foo).parameter(0).toBeNumber();
expectTypeOf(foo).parameter(1).toBeString();

WARNING

Użycie na typie, który nie jest funkcją, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

constructorParameters ​

  • Typ: ExpectTypeOf<ConstructorParameters>

Możesz wyodrębnić typy parametrów konstruktora jako tablicę typów i wykonywać na nich asercje.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).constructorParameters.toEqualTypeOf<
  [] | [string | number | Date]
>();

WARNING

Użycie na typie, który nie jest konstruktorem, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

TIP

Możesz również użyć dopasowywacza .toBeConstructibleWith jako bardziej ekspresywnej asercji.

instance ​

  • Typ: ExpectTypeOf<ConstructableInstance>

Ta właściwość daje dostęp do dopasowywaczy, które można wykonać na instancji danej klasy.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).instance.toHaveProperty('toISOString');

WARNING

Użycie na typie, który nie jest konstruktorem, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

items ​

  • Typ: ExpectTypeOf<T>

Możesz pobrać typ elementów tablicy za pomocą .items, aby wykonać dalsze asercje.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf([1, 2, 3]).items.toEqualTypeOf<number>();
expectTypeOf([1, 2, 3]).items.not.toEqualTypeOf<string>();

resolves ​

  • Typ: ExpectTypeOf<ResolvedPromise>

Ten dopasowywacz wyodrębnia typ wartości, na którą rozwiązuje się Promise, dzięki czemu możesz wykonywać na niej dalsze asercje.

ts
import { expectTypeOf } from 'vitest';

async function asyncFunc() {
  return 123;
}

expectTypeOf(asyncFunc).returns.resolves.toBeNumber();
expectTypeOf(Promise.resolve('string')).resolves.toBeString();

WARNING

Użycie na typie, który nie jest obietnicą, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

guards ​

  • Typ: ExpectTypeOf<Guard>

Ten dopasowywacz wyodrębnia typ predykatu typu (np. v is number), dzięki czemu możesz wykonywać na nim asercje.

ts
import { expectTypeOf } from 'vitest';

function isString(v: any): v is string {
  return typeof v === 'string';
}
expectTypeOf(isString).guards.toBeString();

WARNING

Zwraca never, jeśli wartość nie jest funkcją guard, więc nie będzie można go połączyć z innymi dopasowywaczami.

asserts ​

  • Typ: ExpectTypeOf<Assert>

Ten dopasowywacz wyodrębnia typ asercji (np. assert v is number), dzięki czemu możesz wykonywać na niej asercje.

ts
import { expectTypeOf } from 'vitest';

function assertNumber(v: any): asserts v is number {
  if (typeof v !== 'number') throw new TypeError('Nope !');
}

expectTypeOf(assertNumber).asserts.toBeNumber();

WARNING

Zwraca never, jeśli wartość nie jest funkcją asercji, więc nie będzie można go połączyć z innymi dopasowywaczami.

toBeAny ​

  • Typ: () => void

Za pomocą tego dopasowywacza możesz sprawdzić, czy dany typ jest typem any. Jeśli typ jest bardziej szczegółowy niż any, test zakończy się niepowodzeniem.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<any>().toBeAny();
expectTypeOf({} as any).toBeAny();
expectTypeOf('string').not.toBeAny();

toBeUnknown ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ jest typem unknown.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf().toBeUnknown();
expectTypeOf({} as unknown).toBeUnknown();
expectTypeOf('string').not.toBeUnknown();

toBeNever ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ jest typem never.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<never>().toBeNever();
expectTypeOf((): never => {}).returns.toBeNever();

toBeFunction ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ jest funkcją.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeFunction();
expectTypeOf((): never => {}).toBeFunction();

toBeObject ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ jest obiektem.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeObject();
expectTypeOf({}).toBeObject();

toBeArray ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to Array<T>.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeArray();
expectTypeOf([]).toBeArray();
expectTypeOf([1, 2]).toBeArray();
expectTypeOf([{}, 42]).toBeArray();

toBeString ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to string.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeString();
expectTypeOf('').toBeString();
expectTypeOf('a').toBeString();

toBeBoolean ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to boolean.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeBoolean();
expectTypeOf(true).toBeBoolean();
expectTypeOf<boolean>().toBeBoolean();

toBeVoid ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to void.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf<void>().toBeVoid();

toBeSymbol ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to symbol.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Symbol(1)).toBeSymbol();
expectTypeOf<symbol>().toBeSymbol();

toBeNull ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to null.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(null).toBeNull();
expectTypeOf<null>().toBeNull();
expectTypeOf(undefined).not.toBeNull();

toBeUndefined ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ to undefined.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(undefined).toBeUndefined();
expectTypeOf<undefined>().toBeUndefined();
expectTypeOf(null).not.toBeUndefined();

toBeNullable ​

  • Typ: () => void

Ten dopasowywacz sprawdza, czy dany typ dopuszcza wartości null lub undefined.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<1 | undefined>().toBeNullable();
expectTypeOf<1 | null>().toBeNullable();
expectTypeOf<1 | undefined | null>().toBeNullable();

toBeCallableWith ​

  • Typ: () => void

Ten dopasowywacz zapewnia, że można wywołać daną funkcję z określonymi parametrami (tj. że typy argumentów pasują do typów parametrów funkcji).

ts
import { expectTypeOf } from 'vitest';

type NoParam = () => void;
type HasParam = (s: string) => void;

expectTypeOf<NoParam>().toBeCallableWith();
expectTypeOf<HasParam>().toBeCallableWith('some string');

WARNING

Użycie na typie, który nie jest funkcją, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

toBeConstructibleWith ​

  • Typ: () => void

Ten dopasowywacz zapewnia, że można utworzyć nową instancję danej klasy z określonymi parametrami konstruktora (tj. że typy argumentów pasują do typów parametrów konstruktora).

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).toBeConstructibleWith(new Date());
expectTypeOf(Date).toBeConstructibleWith('01-01-2000');

WARNING

Użycie na typie, który nie jest konstruktorem, spowoduje zwrócenie never i uniemożliwi dalsze łączenie.

toHaveProperty ​

  • Typ: <K extends keyof T>(property: K) => ExpectTypeOf<T[K]>

Ten dopasowywacz sprawdza, czy dana właściwość istnieje w danym obiekcie. Jeśli istnieje, zwraca również ten sam zestaw dopasowywaczy dla typu tej właściwości, dzięki czemu można łączyć asercje jedna po drugiej.

ts
import { expectTypeOf } from 'vitest';

const obj = { a: 1, b: '' };

expectTypeOf(obj).toHaveProperty('a');
expectTypeOf(obj).not.toHaveProperty('c');

expectTypeOf(obj).toHaveProperty('a').toBeNumber();
expectTypeOf(obj).toHaveProperty('b').toBeString();
expectTypeOf(obj).toHaveProperty('a').not.toBeString();
Pager
Poprzednia stronaexpect
Następna stronaassert

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/api/expect-typeof

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors