API wtyczek 3.1.0+
WARNING
Jest to zaawansowane API. Jeśli Twoim celem jest jedynie uruchomienie testów, prawdopodobnie nie będziesz go potrzebować. Jest ono głównie przeznaczone dla twórców bibliotek.
Niniejszy przewodnik zakłada znajomość pracy z wtyczkami Vite.
Vitest obsługuje eksperymentalny hook wtyczki configureVitest
od wersji 3.1. Wszelkie uwagi dotyczące tego API są mile widziane na GitHubie.
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 re-eksportuje wszystkie typy Vite poprzez przestrzeń nazw Vite
, co pozwala na synchronizację wersji. Jeśli jednak tworzysz wtyczkę zarówno dla Vite, jak i Vitest, możesz nadal używać typu Plugin
z punktu wejścia vite
. Upewnij się tylko, że masz gdzieś odwołanie do vitest/config
, aby configureVitest
został poprawnie rozszerzony:
/// <reference types="vitest/config" />
W przeciwieństwie do reporter.onInit
, ten hook uruchamia się wcześnie w cyklu życia Vitest, umożliwiając wprowadzanie zmian w konfiguracji, takich jak coverage
i reporters
. Co ważniejsze, możesz manipulować globalną konfiguracją z projektu testowego, jeśli Twoja wtyczka jest zdefiniowana w projekcie, a nie w globalnej konfiguracji.
Kontekst
project
Bieżący projekt testowy, do którego należy wtyczka.
Tryb przeglądarki
Zauważ, że jeśli korzystasz z funkcji przeglądarki, pole project.browser
nie jest jeszcze ustawione. Zamiast tego użyj zdarzenia reporter.onBrowserInit
.
vitest
Globalna instancja Vitest. Możesz zmienić globalną konfigurację, bezpośrednio modyfikując właściwość vitest.config
:
vitest.config.coverage.enabled = false;
vitest.config.reporters.push([['my-reporter', {}]]);
Konfiguracja jest przetworzona
Zauważ, że Vitest już przetworzył konfigurację, więc niektóre typy mogą różnić się od typowej konfiguracji użytkownika. Oznacza to również, że niektóre właściwości nie zostaną ponownie przetworzone, takie jak setupFile
. Jeśli dodajesz nowe pliki, upewnij się, że najpierw je przetworzysz.
W tym momencie instancje raportów jeszcze nie zostały utworzone, więc modyfikacja vitest.reporters
nie przyniesie żadnego efektu, ponieważ zostanie nadpisana. Jeśli musisz wstrzyknąć własny raportujący, zamiast tego zmodyfikuj konfigurację.
injectTestProjects
function injectTestProjects(
config: TestProjectConfiguration | TestProjectConfiguration[]
): Promise<TestProject[]>;
Ta metoda akceptuje wzorzec glob dla konfiguracji, ścieżkę do pliku konfiguracyjnego lub konfigurację wbudowaną. Zwraca tablicę przetworzonych projektów testowych.
// dodaj pojedynczy projekt z niestandardowym aliasem
const newProjects = await injectTestProjects({
// możesz dziedziczyć bieżącą konfigurację projektu, odwołując się do właściwości `extends`
// zauważ, że nie możesz mieć projektu o już istniejącej nazwie,
// więc dobrą praktyką jest zdefiniowanie niestandardowej nazwy
extends: project.vite.config.configFile,
test: {
name: 'my-custom-alias',
alias: {
customAlias: resolve('./custom-path.js'),
},
},
});
Projekty są filtrowane
Vitest filtruje projekty podczas przetwarzania konfiguracji. Jeśli użytkownik zdefiniował filtr, dodany projekt może nie zostać przetworzony, chyba że pasuje do filtra. Możesz zaktualizować filtr za pomocą opcji vitest.config.project
, aby zawsze uwzględniać swój projekt testowy:
vitest.config.project.push('my-project-name');
Zauważ, że będzie to miało wpływ tylko na projekty wstrzyknięte za pomocą metody injectTestProjects
.
Odwoływanie się do bieżącej konfiguracji
Jeśli chcesz zachować konfigurację użytkownika, możesz użyć właściwości extends
. Wszystkie inne właściwości zostaną połączone z konfiguracją użytkownika.
Dostęp do pliku configFile
projektu można uzyskać w konfiguracji Vite: project.vite.config.configFile
.
Zauważ, że to również odziedziczy nazwę – Vitest nie pozwala na istnienie wielu projektów o tej samej nazwie, co spowoduje błąd. Upewnij się, że określono unikalną nazwę. Bieżąca nazwa jest dostępna poprzez właściwość project.name
, a wszystkie używane nazwy są dostępne w tablicy vitest.projects
.