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

Avanzato

API di Node

Test Runner

Metadati delle attività

Estendere i reporter

Pool personalizzato

In questa pagina

Metadati delle attività ​

WARNING

Vitest espone API private sperimentali. Le modifiche che comportano breaking changes potrebbero non seguire semver, pertanto si consiglia di fissare la versione di Vitest quando la si utilizza.

Se stai sviluppando un reporter personalizzato o utilizzando l'API Node.js di Vitest, potrebbe essere utile passare dati dai test eseguiti in contesti diversi al tuo reporter o gestore Vitest personalizzato.

A questo scopo, affidarsi al contesto del test non è una soluzione praticabile, poiché non può essere serializzato. Tuttavia, con Vitest, è possibile utilizzare la proprietà meta disponibile su ogni attività (suite o test) per condividere dati tra i tuoi test e il processo Node.js. È importante notare che la comunicazione è unidirezionale, poiché la proprietà meta può essere modificata solo dall'interno del contesto del test. Eventuali modifiche apportate nel contesto Node.js non saranno visibili nei test.

È possibile popolare la proprietà meta nel contesto del test o all'interno degli hook beforeAll e afterAll per le attività della suite.

ts
afterAll(suite => {
  suite.meta.done = true;
});

test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler';
});

Al completamento di un test, Vitest invierà un'attività includendo il risultato e meta al processo Node.js utilizzando RPC. Per intercettare ed elaborare questa attività, è possibile utilizzare il metodo onTaskUpdate disponibile nell'implementazione del tuo reporter:

ts
// custom-reporter.js
export default {
  // puoi intercettare i pacchetti se necessario
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0];
  },
  // meta si trova su ogni attività all'interno di "onFinished"
  onFinished(files) {
    files[0].meta.done === true;
    files[0].tasks[0].meta.custom === 'some-custom-handler';
  },
};

WARNING

Vitest può inviare più attività contemporaneamente se diversi test vengono completati in un breve lasso di tempo.

BEWARE

Vitest utilizza diversi metodi di comunicazione con il processo Node.js.

  • Se Vitest esegue i test all'interno di worker thread, invierà i dati tramite message port
  • Se Vitest utilizza un processo figlio, i dati verranno inviati come Buffer serializzato tramite l'API process.send
  • Se Vitest esegue i test nel browser, i dati verranno convertiti in stringa utilizzando il pacchetto flatted

La regola generale è che puoi inviare quasi tutto, ad eccezione di funzioni, Promise, regexp (v8.stringify non può serializzarlo, ma puoi inviare una versione stringa e analizzarla tu stesso nel processo Node.js) e altri dati non serializzabili, ma puoi avere riferimenti ciclici al loro interno.

Inoltre, assicurati di serializzare le proprietà Error prima di impostarle.

È inoltre possibile ottenere queste informazioni dallo stato di Vitest una volta che i test hanno terminato l'esecuzione:

ts
const vitest = await createVitest('test');
await vitest.start();
vitest.state.getFiles()[0].meta.done === true;
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler';

È inoltre possibile estendere le definizioni dei tipi quando si utilizza TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Pagina precedenteTest Runner
Pagina successivaEstendere i reporter

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/metadata

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors