API dei Plugin 3.1.0+
WARNING
Questa è un'API avanzata. Se desideri semplicemente eseguire i test, probabilmente non ne hai bisogno. È utilizzata principalmente dagli autori di librerie.
Questa guida presuppone che tu abbia familiarità con l'utilizzo dei plugin Vite.
Vitest supporta un hook sperimentale per i plugin, configureVitest
, a partire dalla versione 3.1. Qualsiasi feedback relativo a questa API è ben accetto su 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 riesporta tutte le importazioni di soli tipi Vite tramite un namespace Vite
, che puoi utilizzare per mantenere le tue versioni sincronizzate. Tuttavia, se stai scrivendo un plugin sia per Vite che per Vitest, puoi continuare a usare il tipo Plugin
dall'entrypoint vite
. Assicurati solo di avere vitest/config
referenziato in qualche punto in modo che configureVitest
sia esteso correttamente:
/// <reference types="vitest/config" />
A differenza di reporter.onInit
, questo hook viene eseguito all'inizio del ciclo di vita di Vitest, consentendoti di modificare la configurazione come coverage
e reporters
. Un aspetto più rilevante è che puoi manipolare la configurazione globale da un progetto di test se il tuo plugin è definito nel progetto e non nella configurazione globale.
Contesto
project
L'attuale progetto di test a cui appartiene il plugin.
Modalità Browser
Nota che se fai affidamento su una funzionalità del browser, il campo project.browser
non è ancora impostato. Usa invece l'evento reporter.onBrowserInit
.
vitest
L'istanza globale di Vitest. Puoi modificare la configurazione globale modificando direttamente la proprietà vitest.config
:
vitest.config.coverage.enabled = false;
vitest.config.reporters.push([['my-reporter', {}]]);
La Configurazione è Risolta
Nota che Vitest ha già risolto la configurazione, quindi alcuni tipi potrebbero differire dalla configurazione utente abituale. Ciò significa anche che alcune proprietà non verranno risolte di nuovo, come setupFile
. Se stai aggiungendo nuovi file, assicurati di risolverli prima.
A questo punto i reporter non sono ancora stati creati, quindi la modifica di vitest.reporters
non avrà alcun effetto perché verrà sovrascritta. Se hai bisogno di iniettare il tuo reporter, modifica invece la configurazione.
injectTestProjects
function injectTestProjects(
config: TestProjectConfiguration | TestProjectConfiguration[]
): Promise<TestProject[]>;
Questo metodo accetta un pattern glob di configurazione, un percorso di file per la configurazione o una configurazione inline. Restituisce un array di progetti di test risolti.
// inietta un singolo progetto con un alias personalizzato
const newProjects = await injectTestProjects({
// puoi ereditare la configurazione del progetto corrente facendo riferimento a `extends`
// nota che non puoi avere un progetto con un nome già esistente,
// quindi è una buona pratica definire un nome personalizzato
extends: project.vite.config.configFile,
test: {
name: 'my-custom-alias',
alias: {
customAlias: resolve('./custom-path.js'),
},
},
});
I Progetti sono Filtrati
Vitest filtra i progetti durante la risoluzione della configurazione, quindi se l'utente ha definito un filtro, il progetto iniettato potrebbe non essere risolto a meno che non corrisponda al filtro. Puoi aggiornare il filtro tramite l'opzione vitest.config.project
per includere sempre il tuo progetto di test:
vitest.config.project.push('my-project-name');
Nota che questo influenzerà solo i progetti iniettati con il metodo injectTestProjects
.
Referenziare la Configurazione Corrente
Se vuoi mantenere la configurazione utente, puoi specificare la proprietà extends
. Tutte le altre proprietà verranno unite con la configurazione definita dall'utente.
Il configFile
del progetto può essere acceduto nella configurazione di Vite: project.vite.config.configFile
.
Nota che questo erediterà anche il name
- Vitest non consente più progetti con lo stesso nome, quindi questo genererà un errore. Assicurati di aver specificato un nome diverso. Puoi accedere al nome corrente tramite la proprietà project.name
e tutti i nomi usati sono disponibili nell'array vitest.projects
.