Skip to content
Vitest 3
Main Navigation Guida & APIConfigurazioneModalità BrowserAPI avanzata
3.2.0
2.1.9
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

API

Node API

API Avanzate

API di Vitest

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

API dei Plugin

API del Runner

Reporter

Metadati del Task

Guida

Esecuzione dei Test

Estensione dei Reporter

Pool Personalizzato

Configurazione di Vitest

Riferimento API di test

In questa pagina

Metadati del Task ​

WARNING

Vitest espone API private sperimentali. Le modifiche che comportano interruzioni potrebbero non seguire SemVer. Si consiglia di bloccare la versione di Vitest quando si utilizzano queste API.

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

Per realizzare ciò, affidarsi al contesto di test non è fattibile poiché non può essere serializzato. Tuttavia, con Vitest, puoi utilizzare la proprietà meta disponibile su ogni task (suite o test) per condividere dati tra i tuoi test e il processo Node.js. È importante notare che questa comunicazione è unidirezionale, poiché la proprietà meta può essere modificata solo dall'interno del contesto di test. Qualsiasi modifica apportata all'interno del contesto Node.js non sarà visibile nei test.

Puoi popolare la proprietà meta nel contesto di test o all'interno degli hook beforeAll/afterAll per i task della suite.

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

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

Una volta che un test è completato, Vitest invierà un task, inclusi il risultato e meta, al processo Node.js utilizzando RPC. Questi dati saranno poi riportati in onTestCaseResult e altri hook che hanno accesso ai task. Per elaborare questo caso di test, puoi utilizzare il metodo onTestCaseResult disponibile nell'implementazione del reporter:

ts
import type { Reporter, TestCase, TestModule } from 'vitest/node';

export default {
  onTestCaseResult(testCase: TestCase) {
    // custom === 'some-custom-handler' ✅
    const { custom } = testCase.meta();
  },
  onTestRunEnd(testModule: TestModule) {
    testModule.meta().done === true;
    testModule.children.at(0).meta().custom === 'some-custom-handler';
  },
} satisfies Reporter;

ATTENZIONE

Vitest utilizza metodi diversi per comunicare con il processo Node.js:

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

Questa proprietà è presente anche in ogni test nel reporter json, quindi assicurati che i dati possano essere serializzati in JSON.

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

Puoi anche ottenere queste informazioni dallo stato di Vitest al termine dell'esecuzione dei test:

ts
const vitest = await createVitest('test');
const { testModules } = await vitest.start();

const testModule = testModules[0];
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';

È anche possibile estendere le definizioni di tipo utilizzando TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Pagina precedenteReporter
Pagina successivaEsecuzione dei Test

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/metadata

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team