expectTypeOf
- Тип:
<T>(a: unknown) => ExpectTypeOf
not
- Тип:
ExpectTypeOf
Вы можете инвертировать любое утверждение, используя свойство .not
.
toEqualTypeOf
- Тип:
<T>(expected: T) => void
Этот матчер проверяет, являются ли типы полностью идентичными. Он не выдаст ошибку, если два объекта имеют разные значения, но одинаковый тип. Однако, он выдаст ошибку, если в ожидаемом типе отсутствует свойство, присутствующее в проверяемом.
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. С помощью этого матчера вы можете проверить, "соответствует" ли тип объекта ожидаемому типу.
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
для извлечения определенного типа из объединения для дальнейшего тестирования.
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
для исключения типов из объединения для последующего тестирования.
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
для извлечения типа возвращаемого значения функции.
import { expectTypeOf } from 'vitest';
expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf((a: number) => [a, a]).returns.toEqualTypeOf([1, 2]);
WARNING
При использовании не с типом функции, он вернет never
, и вы не сможете использовать другие матчеры после него.
parameters
- Тип:
ExpectTypeOf<Parameters>
Вы можете извлечь типы аргументов функции с помощью .parameters
для выполнения утверждений об их значениях. Параметры возвращаются в виде массива типов.
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.
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>
Вы можете извлечь типы параметров конструктора в виде массива типов и выполнить утверждения над ними с помощью этого метода.
import { expectTypeOf } from 'vitest';
expectTypeOf(Date).constructorParameters.toEqualTypeOf<
[] | [string | number | Date]
>();
WARNING
При использовании не с типом конструктора, он вернет never
, и вы не сможете использовать другие матчеры после него.
TIP
Вы также можете использовать матчер .toBeConstructibleWith
для более выразительной проверки.
instance
- Тип:
ExpectTypeOf<ConstructableInstance>
Это свойство предоставляет доступ к матчерам, которые можно применять к типу экземпляра данного класса.
import { expectTypeOf } from 'vitest';
expectTypeOf(Date).instance.toHaveProperty('toISOString');
WARNING
При использовании не с типом конструктора, он вернет never
, и вы не сможете использовать другие матчеры после него.
items
- Тип:
ExpectTypeOf<T>
Вы можете получить тип элемента массива с помощью .items
для выполнения последующих утверждений.
import { expectTypeOf } from 'vitest';
expectTypeOf([1, 2, 3]).items.toEqualTypeOf<number>();
expectTypeOf([1, 2, 3]).items.not.toEqualTypeOf<string>();
resolves
- Тип:
ExpectTypeOf<ResolvedPromise>
Этот матчер извлекает тип разрешенного значения Promise
, чтобы вы могли выполнять другие утверждения о нем.
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
), чтобы вы могли выполнять утверждения о нем.
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
), чтобы вы могли выполнять утверждения о нем.
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
. Если тип более конкретный, тест завершится неудачей.
import { expectTypeOf } from 'vitest';
expectTypeOf<any>().toBeAny();
expectTypeOf({} as any).toBeAny();
expectTypeOf('string').not.toBeAny();
toBeUnknown
- Тип:
() => void
Этот матчер проверяет, соответствует ли предоставленный тип типу unknown
.
import { expectTypeOf } from 'vitest';
expectTypeOf().toBeUnknown();
expectTypeOf({} as unknown).toBeUnknown();
expectTypeOf('string').not.toBeUnknown();
toBeNever
- Тип:
() => void
Этот матчер проверяет, соответствует ли предоставленный тип типу never
.
import { expectTypeOf } from 'vitest';
expectTypeOf<never>().toBeNever();
expectTypeOf((): never => {}).returns.toBeNever();
toBeFunction
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип функцией.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeFunction();
expectTypeOf((): never => {}).toBeFunction();
toBeObject
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип объектом.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeObject();
expectTypeOf({}).toBeObject();
toBeArray
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип массивом.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeArray();
expectTypeOf([]).toBeArray();
expectTypeOf([1, 2]).toBeArray();
expectTypeOf([{}, 42]).toBeArray();
toBeString
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип строкой.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeString();
expectTypeOf('').toBeString();
expectTypeOf('a').toBeString();
toBeBoolean
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип логическим значением.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeBoolean();
expectTypeOf(true).toBeBoolean();
expectTypeOf<boolean>().toBeBoolean();
toBeVoid
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип типом void
.
import { expectTypeOf } from 'vitest';
expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf<void>().toBeVoid();
toBeSymbol
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип символом.
import { expectTypeOf } from 'vitest';
expectTypeOf(Symbol(1)).toBeSymbol();
expectTypeOf<symbol>().toBeSymbol();
toBeNull
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип типом null
.
import { expectTypeOf } from 'vitest';
expectTypeOf(null).toBeNull();
expectTypeOf<null>().toBeNull();
expectTypeOf(undefined).not.toBeNull();
toBeUndefined
- Тип:
() => void
Этот матчер проверяет, является ли предоставленный тип типом undefined
.
import { expectTypeOf } from 'vitest';
expectTypeOf(undefined).toBeUndefined();
expectTypeOf<undefined>().toBeUndefined();
expectTypeOf(null).not.toBeUndefined();
toBeNullable
- Тип:
() => void
Этот матчер проверяет, является ли тип объединением с null
или undefined
.
import { expectTypeOf } from 'vitest';
expectTypeOf<1 | undefined>().toBeNullable();
expectTypeOf<1 | null>().toBeNullable();
expectTypeOf<1 | undefined | null>().toBeNullable();
toBeCallableWith
- Тип:
() => void
Этот матчер гарантирует, что предоставленную функцию можно вызвать с указанным набором параметров.
import { expectTypeOf } from 'vitest';
type NoParam = () => void;
type HasParam = (s: string) => void;
expectTypeOf<NoParam>().toBeCallableWith();
expectTypeOf<HasParam>().toBeCallableWith('some string');
WARNING
При использовании не с типом функции, он вернет never
, и вы не сможете использовать другие матчеры после него.
toBeConstructibleWith
- Тип:
() => void
Этот матчер гарантирует, что можно создать новый экземпляр класса с указанным набором параметров конструктора.
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]>
Этот матчер проверяет, существует ли свойство с указанным именем в предоставленном объекте. Если свойство существует, он также возвращает тот же набор матчеров для типа этого свойства, чтобы вы могли вызывать следующие утверждения в цепочке.
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();