Este módulo configura un monorepo listo para CI/CD con tests automatizados para backend y frontend. Usa pnpm workspaces para gestionar los sub-paquetes y Vitest como test runner en ambos extremos, combinado con Supertest para tests HTTP en el backend y React Testing Library para tests de componentes en el frontend.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/midudev/jscamp/llms.txt
Use this file to discover all available pages before exploring further.
Lo que aprenderás
- Configurar un monorepo con pnpm workspaces
- Escribir tests HTTP de integración con Supertest
- Usar Vitest como alternativa rápida a Jest, compatible con ESM
- Testear componentes React con React Testing Library y
jsdom - Linting con ESLint en todos los paquetes con un solo comando
- Añadir un badge de GitHub Actions al README
Estructura del Monorepo
Tests del Backend
El backend expone una Task API construida con Express 5. Los tests usan el patrón factory function (createApp) para crear instancias de la app aisladas en cada test, sin compartir estado entre suites.
Casos de test cubiertos
| Test | Método | Ruta | Qué verifica |
|---|---|---|---|
| Root route | GET | / | Devuelve nombre, descripción y lista de endpoints |
| Health check | GET | /health | ok: true, service: "task-api" y timestamp |
| Listar tareas | GET | /api/tasks | Array de 2 tareas con id y title correctos |
| Tarea no encontrada | GET | /api/tasks/unknown | HTTP 404 con { error: "Task not found" } |
| Crear tarea | POST | /api/tasks | HTTP 201, tarea con completed: false |
| Validación de título | POST | /api/tasks | HTTP 400 si el título tiene menos de 3 caracteres |
| Actualizar tarea | PATCH | /api/tasks/:id | Modifica completed o title de la tarea |
| Estadísticas | GET | /api/stats | { total, completed, pending } calculados correctamente |
| Eliminar tarea | DELETE | /api/tasks/:id | HTTP 204 y tarea eliminada de la lista |
Los tests de estadísticas y eliminación usan
createApp({ initialTasks }) para inyectar datos conocidos, evitando dependencias entre tests. Es el patrón recomendado para tests deterministas.Tests del Frontend
El frontend usa React Testing Library junto con Vitest para renderizar componentes en un entorno DOM simulado (jsdom).
¿Qué verifica este test?
El test renderiza el componente<App /> y comprueba que:
- El heading principal “Plan del día” está presente en el DOM.
- El campo de nueva tarea (identificado por su label accesible) está visible.
- Una de las tareas iniciales del seed (“preparar ejemplos de github actions”) se renderiza en la lista.
- La sección informativa con
GET /api/tasksaparece en la página.
Scripts del Monorepo
Elpackage.json raíz define scripts que usan la flag -r (recursive) de pnpm para ejecutar el mismo script en todos los paquetes del workspace simultáneamente:
| Script raíz | Equivalente | Descripción |
|---|---|---|
test | pnpm -r test | Ejecuta vitest run en backend y frontend |
lint | pnpm -r lint | Ejecuta ESLint en todos los paquetes |
build | pnpm -r build | Compila frontend (Vite) y verifica sintaxis del backend |
test:backend | pnpm --filter @jscamp-ci/backend test | Solo tests del backend |
test:frontend | pnpm --filter @jscamp-ci/frontend test | Solo tests del frontend |