API плагина 3.1.0+
WARNING
Это продвинутый API. Если вы просто хотите запустить тесты, вам, вероятно, это не нужно. Он в основном используется авторами библиотек.
Это руководство предполагает, что вы умеете работать с плагинами Vite.
Vitest поддерживает экспериментальный хук плагина configureVitest
начиная с версии 3.1. Любые отзывы об этом API приветствуются на GitHub.
import type { Vite, VitestPluginContext } from 'vitest/node';
export function plugin(): Vite.Plugin {
return {
name: 'vitest:my-plugin',
configureVitest(context: VitestPluginContext) {
// ...
},
};
}
/// <reference types="vitest/config" />
import type { Plugin } from 'vite';
export function plugin(): Plugin {
return {
name: 'vitest:my-plugin',
transform() {
// ...
},
configureVitest(context) {
// ...
},
};
}
TypeScript
Vitest реэкспортирует все типовые импорты Vite через пространство имён Vite
, которое вы можете использовать для синхронизации версий. Однако, если вы пишете плагин как для Vite, так и для Vitest, вы можете продолжать использовать тип Plugin
из точки входа Vite. Просто убедитесь, что у вас где-то есть ссылка на vitest/config
, чтобы configureVitest
был правильно дополнен:
/// <reference types="vitest/config" />
В отличие от reporter.onInit
, этот хук выполняется на раннем этапе жизненного цикла Vitest, позволяя вам вносить изменения в такие параметры конфигурации, как coverage
и reporters
. Важное изменение: вы можете манипулировать глобальной конфигурацией из тестового проекта, если ваш плагин определен в проекте, а не в глобальной конфигурации.
Контекст
project
Текущий тестовый проект, которому принадлежит плагин.
Browser Mode
Обратите внимание, что если вы полагаетесь на какую-либо функцию браузера, поле project.browser
еще не установлено. Вместо этого используйте событие reporter.onBrowserInit
.
vitest
Глобальный экземпляр Vitest. Вы можете изменить глобальную конфигурацию, прямо изменяя свойство vitest.config
:
vitest.config.coverage.enabled = false;
vitest.config.reporters.push([['my-reporter', {}]]);
Config is Resolved
Обратите внимание, что Vitest уже обработал конфигурацию, поэтому некоторые типы могут отличаться от обычной пользовательской конфигурации. Это также означает, что некоторые свойства не будут обработаны снова, например setupFile
. Если вы добавляете новые файлы, убедитесь, что вы сначала разрешили их.
На этом этапе репортеры еще не созданы, поэтому изменение vitest.reporters
не окажет никакого эффекта, так как оно будет перезаписано. Если вам нужно внедрить свой собственный репортер, вместо этого измените конфигурацию.
injectTestProjects
function injectTestProjects(
config: TestProjectConfiguration | TestProjectConfiguration[]
): Promise<TestProject[]>;
Этот метод принимает шаблон glob для конфигурации, путь к файлу настроек или встроенные настройки. Он возвращает массив разрешенных тестовых проектов.
// инъекция одиночного проекта с пользовательским псевдонимом
const newProjects = await injectTestProjects({
// вы можете наследовать текущую конфигурацию проекта, ссылаясь на `extends`
// учтите, что нельзя иметь проект с именем, которое уже существует,
// поэтому рекомендуется определить пользовательское имя
extends: project.vite.config.configFile,
test: {
name: 'my-custom-alias',
alias: {
customAlias: resolve('./custom-path.js'),
},
},
});
Projects are Filtered
Vitest фильтрует проекты во время разрешения конфигурации, поэтому, если пользователь определил фильтр, добавленный проект может быть не разрешен, если он не соответствует фильтру. Вы можете обновить фильтр с помощью опции vitest.config.project
, чтобы всегда включать ваш тестовый проект:
vitest.config.project.push('my-project-name');
Обратите внимание, что это затронет только проекты, добавленные методом injectTestProjects
.
Referencing the Current Config
Если вы хотите сохранить пользовательскую конфигурацию, вы можете использовать свойство extends
. Все остальные свойства будут объединены с конфигурацией, определенной пользователем.
configFile
проекта можно получить в конфигурации Vite: project.vite.config.configFile
.
Обратите внимание, что это также унаследует свойство name
- Vitest не допускает нескольких проектов с одинаковым именем, поэтому это вызовет ошибку. Убедитесь, что вы задали другое имя. Вы можете получить доступ к текущему имени с помощью свойства project.name
, а все используемые имена доступны в массиве vitest.projects
.