Skip to content
Vitest 1
Main Navigation РуководствоAPIКонфигурацияПродвинутый
1.6.1
0.34.6

Русский

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

Русский

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

Внешний вид

Sidebar Navigation

Руководство

Зачем Vitest

Начало работы

Функциональность

Рабочая область

Интерфейс командной строки

Фильтрация тестов

Репортёры

Покрытие кода

Снапшоты

Мокирование

Тестирование типов

Vitest UI

Режим браузера

In-source тестирование (Тестирование в исходном коде)

Контекст теста

Тестовая среда

Расширение проверок (matchers)

Интеграции с IDE

Отладка

Сравнения с другими тестовыми фреймворками

Руководство по миграции

Распространенные ошибки

Улучшение производительности

API

Справочник по Test API

Mock-функции

Vitest

expect

expectTypeOf

assert

assertType

Конфигурация

Настройка конфигурационного файла Vitest

Настройка Vitest

Содержание страницы

expectTypeOf ​

WARNING

Во время выполнения эта функция ничего не делает. Чтобы включить проверку типов, не забудьте передать флаг --typecheck.

  • Тип: <T>(a: unknown) => ExpectTypeOf

not ​

  • Тип: ExpectTypeOf

Вы можете инвертировать любое утверждение, используя свойство .not.

toEqualTypeOf ​

  • Тип: <T>(expected: T) => void

Этот матчер проверяет, являются ли типы полностью идентичными. Он не выдаст ошибку, если два объекта имеют разные значения, но одинаковый тип. Однако, он выдаст ошибку, если в ожидаемом типе отсутствует свойство, присутствующее в проверяемом.

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 ​

  • Тип: <T>(expected: T) => void

Этот матчер проверяет, расширяет ли проверяемый тип ожидаемый тип. Он отличается от toEqual и больше похож на toMatchObject() из expect's. С помощью этого матчера вы можете проверить, "соответствует" ли тип объекта ожидаемому типу.

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 ​

  • Тип: ExpectTypeOf<ExtractedUnion>

Вы можете использовать .extract для извлечения определенного типа из объединения для дальнейшего тестирования.

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 }>() // извлекает тип { xs?: any } из объединения
  .toEqualTypeOf<{
    xs?: CSSProperties;
    sm?: CSSProperties;
    md?: CSSProperties;
  }>();

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<unknown[]>() // извлекает тип unknown[] из объединения
  .toEqualTypeOf<CSSProperties[]>();

WARNING

Если указанный тип не найден в объединении, .extract вернет never.

exclude ​

  • Тип: ExpectTypeOf<NonExcludedUnion>

Вы можете использовать .exclude для исключения типов из объединения для последующего тестирования.

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 }>() // или просто .exclude<unknown[] | { xs?: unknown }>()
  .toEqualTypeOf<CSSProperties>();

WARNING

Если указанный тип не найден в объединении, .exclude вернет never.

returns ​

  • Тип: ExpectTypeOf<ReturnValue>

Вы можете использовать .returns для извлечения типа возвращаемого значения функции.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

При использовании не с типом функции, он вернет never, и вы не сможете использовать другие матчеры после него.

parameters ​

  • Тип: ExpectTypeOf<Parameters>

Вы можете извлечь типы аргументов функции с помощью .parameters для выполнения утверждений об их значениях. Параметры возвращаются в виде массива типов.

ts
import { expectTypeOf } from 'vitest';

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

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

WARNING

При использовании не с типом функции, он вернет never, и вы не сможете использовать другие матчеры после него.

TIP

Вы также можете использовать матчер .toBeCallableWith для более выразительной проверки.

parameter ​

  • Тип: (nth: number) => ExpectTypeOf

Вы можете извлечь тип определенного аргумента функции с помощью вызова .parameter(number) для выполнения других утверждений о нем. number - это индекс аргумента, начиная с 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

При использовании не с типом функции, он вернет never, и вы не сможете использовать другие матчеры после него.

constructorParameters ​

  • Тип: ExpectTypeOf<ConstructorParameters>

Вы можете извлечь типы параметров конструктора в виде массива типов и выполнить утверждения над ними с помощью этого метода.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

При использовании не с типом конструктора, он вернет never, и вы не сможете использовать другие матчеры после него.

TIP

Вы также можете использовать матчер .toBeConstructibleWith для более выразительной проверки.

instance ​

  • Тип: ExpectTypeOf<ConstructableInstance>

Это свойство предоставляет доступ к матчерам, которые можно применять к типу экземпляра данного класса.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

При использовании не с типом конструктора, он вернет never, и вы не сможете использовать другие матчеры после него.

items ​

  • Тип: ExpectTypeOf<T>

Вы можете получить тип элемента массива с помощью .items для выполнения последующих утверждений.

ts
import { expectTypeOf } from 'vitest';

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

resolves ​

  • Тип: ExpectTypeOf<ResolvedPromise>

Этот матчер извлекает тип разрешенного значения Promise, чтобы вы могли выполнять другие утверждения о нем.

ts
import { expectTypeOf } from 'vitest';

async function asyncFunc() {
  return 123;
}

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

WARNING

При использовании не с типом Promise, он вернет never, и вы не сможете использовать другие матчеры после него.

guards ​

  • Тип: ExpectTypeOf<Guard>

Этот матчер извлекает тип guard (например, v is number), чтобы вы могли выполнять утверждения о нем.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Возвращает never, если тип не является функцией-guard, поэтому вы не сможете использовать другие матчеры после него.

asserts ​

  • Тип: ExpectTypeOf<Assert>

Этот матчер извлекает тип assert (например, assert v is number), чтобы вы могли выполнять утверждения о нем.

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

Возвращает never, если тип не является функцией утверждения типа, поэтому вы не сможете использовать другие матчеры после него.

toBeAny ​

  • Тип: () => void

С помощью этого матчера вы можете проверить, является ли предоставленный тип типом any. Если тип более конкретный, тест завершится неудачей.

ts
import { expectTypeOf } from 'vitest';

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

toBeUnknown ​

  • Тип: () => void

Этот матчер проверяет, соответствует ли предоставленный тип типу unknown.

ts
import { expectTypeOf } from 'vitest';

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

toBeNever ​

  • Тип: () => void

Этот матчер проверяет, соответствует ли предоставленный тип типу never.

ts
import { expectTypeOf } from 'vitest';

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

toBeFunction ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип функцией.

ts
import { expectTypeOf } from 'vitest';

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

toBeObject ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип объектом.

ts
import { expectTypeOf } from 'vitest';

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

toBeArray ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип массивом.

ts
import { expectTypeOf } from 'vitest';

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

toBeString ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип строкой.

ts
import { expectTypeOf } from 'vitest';

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

toBeBoolean ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип логическим значением.

ts
import { expectTypeOf } from 'vitest';

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

toBeVoid ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип типом void.

ts
import { expectTypeOf } from 'vitest';

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

toBeSymbol ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип символом.

ts
import { expectTypeOf } from 'vitest';

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

toBeNull ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип типом null.

ts
import { expectTypeOf } from 'vitest';

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

toBeUndefined ​

  • Тип: () => void

Этот матчер проверяет, является ли предоставленный тип типом undefined.

ts
import { expectTypeOf } from 'vitest';

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

toBeNullable ​

  • Тип: () => void

Этот матчер проверяет, является ли тип объединением с null или undefined.

ts
import { expectTypeOf } from 'vitest';

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

toBeCallableWith ​

  • Тип: () => void

Этот матчер гарантирует, что предоставленную функцию можно вызвать с указанным набором параметров.

ts
import { expectTypeOf } from 'vitest';

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

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

WARNING

При использовании не с типом функции, он вернет never, и вы не сможете использовать другие матчеры после него.

toBeConstructibleWith ​

  • Тип: () => void

Этот матчер гарантирует, что можно создать новый экземпляр класса с указанным набором параметров конструктора.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

При использовании не с типом конструктора, он вернет never, и вы не сможете использовать другие матчеры после него.

toHaveProperty ​

  • Тип: <K extends keyof T>(property: K) => ExpectTypeOf<T[K]>

Этот матчер проверяет, существует ли свойство с указанным именем в предоставленном объекте. Если свойство существует, он также возвращает тот же набор матчеров для типа этого свойства, чтобы вы могли вызывать следующие утверждения в цепочке.

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
Предыдущая страницаexpect
Следующая страницаassert

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors

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

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors