Índice
- Introducción
- Creación de proyecto
- Instalacion y configuracion para testing básico
- Instalacion y configuracion para testing avanzado
- Consideraciones finales
- Conclusiones
- Referencias
1. Introducción
El presente post es un ejemplo práctico de cómo crear y configurar un entorno de testing para frontend usando React, Vitest y TypeScript.
El post no se enfoca en el uso de ninguna de estas tecnologías ni brinda ejemplos de testing, sólo se concentra en enseñar la creación de un ambiente de pruebas propicio y listo para usar.
Dicho eso, comencemos.
2. Creación de proyecto
El proyecto lo creamos con Vite, React + SWC y TypeScript haciendo uso de pnpm como gestor de dependencias.
Posteriormente hacemos una limpieza del proyecto creado borrando archivos que no nos servirán para este ejemplo.
El repositorio final del ejemplo lo tendrás disponible al final de este post.
3. Instalacion y configuracion para testing básico
Como primer paso vamos a instalar vitest, es el framework que usaremos para poder realizar las pruebas pertinentes.
pnpm add -D vitest
Con vitest instalado ya podemos hacer pruebas unitarias básicas.
Adicionalmente instalaremos la dependencia @vitest/ui para poder ver la implementación de los test de manera más gráfica y cómoda:
pnpm add @vitest/ui
Y finalmente configuramos los scripts en nuestro package.json:
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
"test": "vitest",
"test:ui": "vitest --ui"
}
En el proyecto encuentras una carpeta helpers con un archivo math.tsx con una función de suma básica que luego se importa y se prueba en math.test.tsx.
En la raíz del proyecto corremos las pruebas con pnpm run test y tendremos lo siguiente:
Ahora si queremos ver las pruebas en un entorno mas grafico podemos hacer pnpm run test:ui y luego veremos esto en el navegador:
Y listo, así de fácil podemos crear un entorno de testing básico en react.
4. Instalacion y configuracion para testing avanzado
Para poder hacer testing de la ui de un componente de react tenemos que instalar algunas dependencias adicionales, veamos cómo se hace.
Primero instalaremos Testing Library, es una libreria que permite hacer testing de interfaces de usuario moderna y fácil de usar.
Para instalarlo nos dirigimos a la pagina de Testing Library y buscamos el comando para instalarlo con React y TypeScript, ahora te dejo el link directo.
En la página nos dan la dependencia para instalarlo con npm
npm install --save-dev @testing-library/react @testing-library/dom @types/react @types/react-dom
Pero para pnpm seria:
pnpm add -D @testing-library/react @testing-library/dom @types/react @types/react-dom
Listo!
Ahora procedemos a las configuraciones.
Vamos a nuestro archivo vite.config.ts que originalmente se ve así:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
})
Debemos cambiar la importación de defineConfig para que sea desde vitest/config y modificar la configuración para que se vea de esta manera:
import { defineConfig } from "vitest/config";
import react from "@vitejs/plugin-react-swc";
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
test: {
environment: "jsdom",
globals: true,
},
});
Lo más importante es esta configuración es el uso de jsdom como dependencia. Justamente jsdom nos ayudará a recrear el DOM de nuestros componentes web fuera del navegador para poder realizar las pertinentes pruebas.
Para probar todo creo un componente básico Hello.tsx:
interface Props {
title: "string;"
}
const Hello = ({title}:Props) => {
return (
<div>{title}</div>
)
}
export default Hello
Y también creo su archivo Hello.test.tsx:
import { describe, test } from "vitest";
import { render } from "@testing-library/react";
import Hello from "./Hello";
describe("Test", ()=> {
test("Test 1", () => {
render(<Hello title="hola" />)
})
})
Si intentamos correr las pruebas tendremos un error por que nos faltan instalar dos dependencias más: jsdom y @vitejs/plugin-react
Una vez hecho esto las pruebas corren sin problemas.
La función render nos sirve para cargar el componente y screen.debug para poder ver la estructura del dom en la consola.
5. Consideraciones finales
Si bien jsdom es la librería que usamos para poder cargar el dom fuera del navegador, es importante mencionar que tenemos otras opciones igual de potentes e importantes por ejemplo happy-dom, alternativa más rápida y ligera que jsdom, con mejor rendimiento. Compatible con la mayoría de APIs del DOM.
| Característica | happy-dom | jsdom |
|---|---|---|
| Velocidad | 🚀 2-10x más rápido | Más lento |
| Tamaño | ~600 KB | ~4 MB |
| Compatibilidad | ~90% APIs DOM | ~95% APIs DOM |
| Fetch API | ✅ Nativo | ❌ Requiere polyfill |
| Uso de memoria | Menor | Mayor |
| Framework por defecto | Vitest | Jest |
El uso de jsdom está más extendido para hacer test pero que esto no te impida probar otras opciones interesantes.
6. Conclusiones
Realizar testing en el frontend es muy importante, poder configurar un ambiente adecuado para las pruebas es igual de relevante para poder asegurarnos como devs la calidad del código mandando a producción.
Hoy en día las herramientas de IA facilitan mucho la realización de pruebas automáticas por lo que no hay excusa para dejar de implementarlas en nuestro proyectos web.
Finalmente destacó la facilidad de configuración de vitest, cómo vitest está hecho por el equipo de desarrollo de vite la compatibilidad y estabilidad es inmejorable y por ello lo recomiendo a más no poder para nuestros futuros y presentes proyectos.
A continuacion te dejo el linka repositorio donde podra encontrar todo el codigo mencionado y mostrado en este post
7. Referencias









Top comments (0)