Skip to content
Vitest 0
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-функции

Vi

expect

expectTypeOf

assertType

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

Настройка Vitest

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

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

Vitest позволяет писать тесты для ваших типов, используя синтаксис expectTypeOf или assertType. По умолчанию все файлы *.test-d.ts считаются файлами с тестами типов, но это можно изменить с помощью опции конфигурации typecheck.include.

Vitest использует tsc или vue-tsc (в зависимости от вашей конфигурации) для анализа результатов. Vitest также отображает ошибки типов, обнаруженные в вашем исходном коде. Это можно отключить с помощью опции конфигурации typecheck.ignoreSourceErrors.

Важно помнить, что Vitest не запускает и не компилирует эти файлы. Они анализируются компилятором статически, поэтому использование динамических операторов невозможно. Это означает, что динамические имена тестов и API test.each, test.runIf, test.skipIf, test.concurrent недоступны. Однако, вы можете использовать другие API, такие как test, describe, .only, .skip и .todo.

Поддерживается использование флагов CLI, таких как --allowOnly и -t, для проверки типов.

ts
import { assertType, expectTypeOf } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name is a string
  assertType(mount({ name: 42 }));
});

Любая ошибка типа в тестовом файле расценивается как ошибка теста, что позволяет использовать различные подходы для тестирования типов вашего проекта.

Список доступных матчеров можно найти в разделе API.

Чтение ошибок ​

При использовании API expectTypeOf могут возникать трудночитаемые или неожиданные ошибки:

ts
expectTypeOf(1).toEqualTypeOf<string>();
//             ^^^^^^^^^^^^^^^^^^^^^^
// index-c3943160.d.ts(90, 20): Arguments for the rest parameter 'MISMATCH' were not provided.

Это связано с тем, как expect-type обрабатывает ошибки типов.

К сожалению, TypeScript не предоставляет метаданные типов без внесения изменений в компилятор. В данный момент мы не можем предоставить более информативные сообщения об ошибках, но ведутся работы в проекте TypeScript для решения этой проблемы. Для получения более полезных сообщений об ошибках, пожалуйста, обратитесь к команде TypeScript с просьбой рассмотреть указанный PR.

Если вам сложно работать с API expectTypeOf и разбираться в ошибках, вы всегда можете использовать более простой API assertType:

ts
const answer = 42;

assertType<number>(answer);
// @ts-expect-error answer is not a string
assertType<string>(answer);

TIP

При использовании синтаксиса @ts-expect-error рекомендуется проверять отсутствие опечаток. Для этого включите ваши файлы типов в опцию конфигурации test.include, чтобы Vitest запускал эти тесты и завершался с ошибкой ReferenceError.

В следующем примере тест пройдет успешно, так как ожидается ошибка, но опечатка в слове «answer» делает эту ошибку ложной:

ts
// @ts-expect-error answer is not a string
assertType<string>(answr); //

Запуск проверки типов ​

Добавьте следующую команду в раздел scripts в package.json:

json
{
  "scripts": {
    "typecheck": "vitest typecheck"
  }
}

Теперь вы можете запустить проверку типов:

sh
# npm
npm run typecheck

# yarn
yarn typecheck

# pnpm
pnpm run typecheck

Vitest использует tsc --noEmit или vue-tsc --noEmit (в зависимости от вашей конфигурации), поэтому вы можете удалить соответствующие скрипты из вашего пайплайна.

Pager
Предыдущая страницаМокирование
Следующая страницаVitest UI

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

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

https://v0.vitest.dev/guide/testing-types

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

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