Ambienti di Test
Vitest offre l'opzione environment per eseguire il codice in un ambiente specifico. Puoi personalizzare il comportamento dell'ambiente con l'opzione environmentOptions.
Per impostazione predefinita, sono disponibili i seguenti ambienti:
node: è l'ambiente predefinito.jsdom: emula l'ambiente del browser fornendo le API del browser. Utilizza il pacchettojsdom.happy-dom: emula l'ambiente del browser fornendo le API del browser ed è considerato più veloce di jsdom, ma non implementa tutte le API. Utilizza il pacchettohappy-dom.edge-runtime: emula l'edge-runtime di Vercel. Utilizza il pacchetto@edge-runtime/vm.
Ambienti per File Specifici
Quando l'opzione environment è impostata nella configurazione, si applica a tutti i file di test del progetto. Per un controllo più preciso, puoi specificare l'ambiente per singoli file tramite commenti di controllo. I commenti di controllo iniziano con @vitest-environment e sono seguiti dal nome dell'ambiente:
// @vitest-environment jsdom
import { test } from 'vitest';
test('test', () => {
expect(typeof window).not.toBe('undefined');
});In alternativa, puoi utilizzare l'opzione environmentMatchGlobs per specificare l'ambiente in base a pattern glob.
Ambiente Personalizzato
A partire dalla versione 0.23.0, è possibile creare un pacchetto personalizzato per estendere l'ambiente Vitest. Per farlo, crea un pacchetto denominato vitest-environment-${name} oppure specifica il percorso di un file JS valido (supportato a partire dalla versione 0.34.0). Questo pacchetto deve esportare un oggetto con la struttura di Environment:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
// optional - only if you support "experimental-vm" pool
async setupVM() {
const vm = await import('node:vm');
const context = vm.createContext();
return {
getVmContext() {
return context;
},
teardown() {
// chiamato dopo l'esecuzione di tutti i test con questo ambiente
},
};
},
setup() {
// setup personalizzato
return {
teardown() {
// chiamato dopo l'esecuzione di tutti i test con questo ambiente
},
};
},
};WARNING
A partire dalla versione 0.34.0, Vitest richiede l'opzione transformMode nell'oggetto environment. Deve essere uguale a ssr o web. Questo valore determina la modalità di trasformazione del codice sorgente da parte dei plugin. Se è impostato su ssr, gli hook del plugin riceveranno ssr: true durante la trasformazione o la risoluzione dei file. Altrimenti, ssr sarà impostato su false.
Puoi anche accedere agli ambienti Vitest predefiniti tramite l'entry vitest/environments:
import { builtinEnvironments, populateGlobal } from 'vitest/environments';
console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }Vitest fornisce inoltre la funzione di utilità populateGlobal, che può essere utilizzata per spostare le proprietà da un oggetto allo spazio dei nomi globale:
interface PopulateOptions {
// indica se le funzioni non-classe devono essere associate allo spazio dei nomi globale
bindFunctions?: boolean;
}
interface PopulateResult {
// un elenco di tutte le chiavi che sono state copiate, anche se il valore non esiste nell'oggetto originale
keys: Set<string>;
// una mappa dell'oggetto originale che potrebbe essere stato sovrascritto con le chiavi
originals: Map<string | symbol, any>;
}
export function populateGlobal(
global: any,
original: any,
options: PopulateOptions
): PopulateResult;