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

Introduzione

Perché Vitest

Per Iniziare

Caratteristiche

Configurazione di Vitest

API

Riferimento API di test

Funzioni Mock

Vi

expect

expectTypeOf

assert

assertType

Guida

Interfaccia a Riga di Comando

Filtro dei Test

Progetti di Test

Reporter

Copertura

Snapshot

Mocking

Parallelismo

Tipi di Test

Vitest UI

Test nel Codice Sorgente

Contesto di Test

Annotazioni dei Test

Ambiente di Test

Estensione dei Matcher

Integrazioni IDE

Debugging

Errori Comuni

Guida alla Migrazione

Migrazione a Vitest 3.0

Migrazione da Jest

Prestazioni

Profilazione delle prestazioni dei test

Ottimizzare le Prestazioni

Modalità Browser

API Avanzate

Confronto con Altri Test Runner

In questa pagina

Estensione dei Matcher ​

Vitest è compatibile sia con Chai che con Jest, offrendo la flessibilità di utilizzare l'API chai.use o expect.extend a tua scelta.

Questa guida si concentrerà sull'estensione dei matcher tramite expect.extend. Per informazioni sull'API di Chai, consulta la loro guida.

Per estendere i matcher predefiniti, invoca expect.extend passando un oggetto contenente i tuoi matcher personalizzati.

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // Non modificare il valore di "pass" in base a isNot. Vitest lo gestisce automaticamente.
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

Se utilizzi TypeScript, puoi estendere l'interfaccia Assertion predefinita in un file di dichiarazione globale (ad esempio: vitest.d.ts) utilizzando il seguente codice:

ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Matchers<T = any> extends CustomMatchers<T> {}
}
ts
import 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: () => R;
}

declare module 'vitest' {
  interface Assertion<T = any> extends CustomMatchers<T> {}
  interface AsymmetricMatchersContaining extends CustomMatchers {}
}

TIP

A partire da Vitest 3.2, è possibile estendere l'interfaccia Matchers per ottenere asserzioni con controllo dei tipi nei metodi expect.extend, expect().* e expect.* contemporaneamente. In precedenza, era necessario definire interfacce separate per ciascuno di essi.

WARNING

Assicurati di includere il file di dichiarazione globale nel tuo tsconfig.json.

Il valore di ritorno di un matcher deve essere compatibile con la seguente interfaccia:

ts
interface ExpectationResult {
  pass: boolean;
  message: () => string;
  // Se forniti, appariranno automaticamente all'interno di un diff quando
  // il matcher fallisce, eliminando la necessità di stampare il diff manualmente.
  actual?: unknown;
  expected?: unknown;
}

WARNING

Se crei un matcher asincrono, ricorda di await il risultato (await expect('foo').toBeFoo()) direttamente nel test:

ts
expect.extend({
  async toBeAsyncAssertion() {
    // ...
  },
});

await expect().toBeAsyncAssertion();

Il primo argomento all'interno della funzione di un matcher è il valore ricevuto (quello all'interno di expect(received)). Gli argomenti rimanenti vengono passati direttamente al matcher.

La funzione del matcher ha accesso al contesto this con le seguenti proprietà:

isNot ​

Restituisce true se il matcher è stato chiamato con not (expect(received).not.toBeFoo()).

promise ​

Se il matcher è stato chiamato su un valore resolved o rejected, questa proprietà conterrà il nome del modificatore. Altrimenti, sarà una stringa vuota.

equals ​

Questa funzione di utilità consente di confrontare due valori. Restituirà true se i valori sono uguali, false altrimenti. Questa funzione è utilizzata internamente da quasi tutti i matcher e supporta nativamente oggetti con matcher asimmetrici.

utils ​

Contiene un insieme di funzioni di utilità che possono essere utilizzate per visualizzare i messaggi.

Il contesto this contiene anche informazioni sul test corrente, che possono essere ottenute anche chiamando expect.getState(). Le proprietà più utili sono:

currentTestName ​

Nome completo del test corrente (incluso il blocco describe).

testPath ​

Percorso del file del test corrente.

Pager
Pagina precedenteAmbiente di Test
Pagina successivaIntegrazioni IDE

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/extending-matchers

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team