Skip to content
Vitest 1
Main Navigation GuidaAPIConfigurazioneAvanzato
1.6.1
0.34.6

Italiano

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Polski
Türkçe
čeština
magyar

Italiano

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Polski
Türkçe
čeština
magyar

Aspetto

Sidebar Navigation

Guida

Perché Vitest

Introduzione

Funzionalità

Workspace

Interfaccia a riga di comando

Filtro dei test

Reporter

Coverage

Snapshot

Mocking

Test dei Tipi

Interfaccia Utente di Vitest

Modalità Browser

Test nel codice sorgente

Contesto del Test

Ambienti di Test

Estensione dei Matchers

Integrazione con gli IDE

Debugging

Confronti con altri Test Runner

Guida alla Migrazione

Errori Frequenti

Ottimizzare le Prestazioni

API

Riferimento API Test

Funzioni Mock

Vi

expect

expectTypeOf

assert

assertType

Configurazione

Gestione del file di configurazione di Vitest

Configurazione di Vitest

In questa pagina

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 pacchetto jsdom.
  • 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 pacchetto happy-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:

ts
// @vitest-environment jsdom

import { expect, 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:

ts
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:

ts
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:

ts
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;
Pager
Pagina precedenteContesto del Test
Pagina successivaEstensione dei Matchers

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/environment

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors