Skip to content
Vitest 3
Main Navigation Guía & APIConfiguraciónModo NavegadorAPI avanzada
3.2.0
2.1.9
1.6.1
0.34.6

Español

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

Español

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

Apariencia

Sidebar Navigation

Introducción

Por qué Vitest

Primeros pasos

Características

Configuración de Vitest

API

Referencia de la API de prueba

Funciones de Simulación

Vi

expect

expectTypeOf

assert

assertType

Guía

Interfaz de línea de comandos

Filtrado de Tests

Proyectos de prueba

Reportes

Cobertura

Instantáneas

Simulación (Mocking)

Paralelismo

Pruebas de Tipado

Interfaz de usuario de Vitest

Pruebas en el código fuente

Contexto de prueba

Anotaciones de prueba

Entorno de pruebas

Extender Matchers

Integraciones con IDE

Depuración

Errores comunes

Guía de migración

Migración a Vitest 3.0

Migración desde Jest

Rendimiento

Perfilado del rendimiento de las pruebas

Mejorando el Rendimiento

Modo Navegador

API Avanzadas

Comparaciones con otros ejecutores de pruebas

En esta página

Extender Matchers ​

Dado que Vitest es compatible tanto con Chai como con Jest, puedes elegir entre usar la API chai.use o expect.extend.

Esta guía se centrará en cómo extender los matchers con expect.extend. Si te interesa la API de Chai, consulta su guía.

Para extender los matchers predeterminados, llama a expect.extend con un objeto que contenga tus matchers personalizados.

ts
expect.extend({
  toBeFoo(received, expected) {
    const { isNot } = this;
    return {
      // No modifiques el valor de "pass" basándote en isNot. Vitest lo gestiona automáticamente.
      pass: received === 'foo',
      message: () => `${received} is${isNot ? ' not' : ''} foo`,
    };
  },
});

Si estás utilizando TypeScript, puedes extender la interfaz Assertion predeterminada en un archivo de declaración de entorno (por ejemplo: vitest.d.ts) con el siguiente código:

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 partir de Vitest 3.2, puedes extender la interfaz Matchers para obtener aserciones de tipo seguro en los métodos expect.extend, expect().* y expect.* simultáneamente. Anteriormente, era necesario definir interfaces separadas para cada uno de ellos.

WARNING

No olvides incluir el archivo de declaración de entorno en tu tsconfig.json.

El valor de retorno de un matcher debe ser compatible con la siguiente interfaz:

ts
interface ExpectationResult {
  pass: boolean;
  message: () => string;
  // Si proporcionas estos valores, aparecerán automáticamente en un diff cuando
  // el matcher falle, eliminando la necesidad de imprimir el diff manualmente.
  actual?: unknown;
  expected?: unknown;
}

WARNING

Si creas un matcher asíncrono, recuerda usar await con el resultado (await expect('foo').toBeFoo()) en la prueba:

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

await expect().toBeAsyncAssertion();

El primer argumento dentro de la función de un matcher es el valor recibido (el que se pasa a expect(received)). Los argumentos adicionales se pasan directamente al matcher.

La función del matcher tiene acceso al contexto this con las siguientes propiedades:

isNot ​

Devuelve true si el matcher fue llamado con not (expect(received).not.toBeFoo()).

promise ​

Si el matcher fue llamado con los modificadores resolved o rejected, este valor contendrá el nombre del modificador. De lo contrario, será una cadena vacía.

equals ​

Esta es una función de utilidad que te permite comparar dos valores. Devolverá true si los valores son iguales, false en caso contrario. Esta función se utiliza internamente para casi todos los matchers y, por defecto, soporta objetos con matchers asimétricos.

utils ​

Contiene un conjunto de funciones de utilidad que puedes usar para formatear mensajes.

El contexto this también contiene información sobre la prueba actual. También puedes obtenerla llamando a expect.getState(). Las propiedades más útiles son:

currentTestName ​

Nombre completo de la prueba actual (incluido el bloque describe).

testPath ​

Ruta al archivo de la prueba actual.

Pager
AnteriorEntorno de pruebas
SiguienteIntegraciones con IDE

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team

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

Publicado bajo la licencia MIT.

Copyright (c) 2021-Present Vitest Team