VITEST BÁSICO: LA MEJOR HERRAMIENTA PARA TESTS EN JAVASCRIPT Y VITE
Vitest es un framework de testing creado específicamente para proyectos que usan Vite. Ventajas principales frente a Jest:
- Mucho más rápido, hasta 10 veces en modo watch
- Soporte nativo de ESM, sin configuraciones raras
- Comparte la misma configuración que el fichero "vite.config.js"
- API casi idéntica a Jest, fácil de migrar
- Excelente soporte para TypeScript, React, Vue, Svelte, etc.
Jest es un framework de testing para JavaScript y TypeScript, muy popular en el mundo del desarrollo frontend y backend.
Instalación
Abrir el proyecto y ejecutar:
Si se necesitas simular el DOM, (para pruebas de componentes o que usen "document", "window", etc.):
Configuración básica
Crear o modificar el archivo "vite.config.js":
import { defineConfig } from 'vite'
export default defineConfig({
test: {
globals: true, // Permite usar describe, it, expect sin importar
environment: 'jsdom', // Simula el navegador
coverage: {
provider: 'v8',
reporter: ['text', 'json', 'html']
}
}
})
También se puede crear un archivo separado "vitest.config.js" si se prefiere separar la configuración de las pruebas.
Añadir scripts en "package.json"
{
"scripts": {
"test": "vitest",
"test:run": "vitest run",
"test:coverage": "vitest run --coverage"
}
}
Primer test
Crear una carpeta "src/utils y el archivo" y el archivo "math.js":
// src/utils/math.js
export function sumar(a, b) {
return a + b
}
export function restar(a, b) {
return a - b
}
export function esPar(numero) {
return numero % 2 === 0
}
Después crear el archivo de pruebas: "src/utils/math.test.js":
// src/utils/math.test.js
import { describe, it, expect } from 'vitest'
import { sumar, restar, esPar } from './math.js'
describe('Funciones matemáticas', () => {
it('debería sumar dos números correctamente', () => {
expect(sumar(2, 3)).toBe(5)
expect(sumar(-1, 1)).toBe(0)
})
it('debería restar dos números correctamente', () => {
expect(restar(5, 2)).toBe(3)
})
it('debería detectar números pares', () => {
expect(esPar(4)).toBe(true)
expect(esPar(7)).toBe(false)
})
})
Ejecutar los tests
Se mostrará algo como lo siguiente:
src/utils/math.test.js (3 tests) 12ms
Presionar "h" en la terminal para ver todas las opciones (modo interactivo).
Usar "vi", el nuevo "jest.fn"
En Vitest se usa "jvi" en lugar de "jest:js"
import { vi } from 'vitest'
const mockFn = vi.fn()
mockFn('hola')
expect(mockFn).toHaveBeenCalledWith('hola')
Matchers más usados
|
Matcher
|
Significado
|
toBe()
|
Igualdad estricta (===)
|
toEqual()
|
Comparación profunda de objetos y arrays
|
toBeTruthy() / toBeFalsy()
|
Verdadero o falso (valores truthy/falsy)
|
toContain()
|
Array o string contiene un elemento/texto
|
toThrow()
|
Función lanza un error
|
toBeGreaterThan()
|
Mayor que un valor
|
Un matcher es una función especial que se usa dentro de "expect()" para comparar el resultado obtenido (actual) con el resultado esperado. Los matchers son las herramientas que te permiten decir "esto debería ser igual a esto otro" de forma legible y potente..
Ejemplo:
expect(usuario).toEqual({ nombre: "Juan", edad: 30 })
expect(() => funcionQueFalla()).toThrow()