Skip to content
Vitest 3
Main Navigation Руководство & APIКонфигурацияРежим браузераРасширенный API
3.2.0
2.1.9
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

API

Справочник по API тестирования

Мок-функции

Vi

expect

expectTypeOf

assert

assertType

Руководство

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

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

Тестовые проекты

Средства отчётности

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

Снапшот-тестирование

Мокирование

Параллелизм

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

Vitest UI

Тестирование в исходном коде

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

Аннотации тестов

Среда тестирования

Расширение матчеров

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

Отладка

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

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

Миграция на Vitest 3.0

Миграция с Jest

Производительность

Профилирование производительности тестов

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

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

Расширенный API

Сравнение с другими тестовыми раннерами

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

Расширение матчеров ​

Поскольку Vitest совместим как с Chai, так и с Jest, вы можете использовать либо API chai.use, либо expect.extend, в зависимости от ваших предпочтений.

В этом руководстве будет рассмотрено расширение матчеров с использованием expect.extend. Если вас интересует API Chai, ознакомьтесь с их руководством.

Чтобы расширить стандартные матчеры, вызовите expect.extend с объектом, содержащим ваши матчеры.

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // Не изменяйте значение "pass" в зависимости от isNot. Vitest сделает это автоматически.
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

Если вы используете TypeScript, вы можете расширить стандартный интерфейс Assertion в файле декларации типов (например, vitest.d.ts) с помощью следующего кода:

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

Начиная с Vitest 3.2, вы можете расширить интерфейс Matchers, чтобы иметь типизированные утверждения в методах expect.extend, expect().* и expect.*. Ранее требовалось определять отдельные интерфейсы для каждого из них.

WARNING

Не забудьте включить файл декларации типов в ваш tsconfig.json.

Возвращаемое значение матчера должно быть совместимо со следующим интерфейсом:

ts
interface ExpectationResult {
  pass: boolean;
  message: () => string;
  // Если вы передадите эти поля, они автоматически появятся в отчете о различиях (diff), если
  // матчер не пройдет, поэтому вам не потребуется выводить diff самостоятельно.
  actual?: unknown;
  expected?: unknown;
}

WARNING

Если вы создаете асинхронный матчер, не забудьте использовать await для его результата (await expect('foo').toBeFoo()) в самом тесте:

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

await expect().toBeAsyncAssertion();

Первый аргумент функции матчера — это полученное значение (то, которое передается в expect(received)). Остальные аргументы передаются непосредственно матчеру.

Функция матчера имеет доступ к контексту this со следующими свойствами:

isNot ​

Возвращает true, если матчер был вызван с модификатором not (expect(received).not.toBeFoo()).

promise ​

Если матчер был вызван с модификатором resolved или rejected, это значение будет содержать название модификатора. В противном случае это будет пустая строка.

equals ​

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

utils ​

Содержит набор служебных функций для отображения сообщений.

Контекст this также содержит информацию о текущем тесте. Эту информацию также можно получить, вызвав expect.getState(). Наиболее полезные свойства:

currentTestName ​

Полное имя текущего теста (включая блок describe).

testPath ​

Путь к текущему тестовому файлу.

Pager
Предыдущая страницаСреда тестирования
Следующая страницаИнтеграции с IDE

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

Авторские права (c) 2021-Present Vitest Team

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

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

Авторские права (c) 2021-Present Vitest Team