JavaScript de Cero a Experto / Testing con Vitest
Reto: la red de seguridad de Mi Bolsillo
Le pusiste blindaje a "Mi Bolsillo" en el módulo 15; hoy le pones la red que verifica que ese blindaje funciona —y que seguirá funcionando cada vez que toques el código. Vas a escribir una suite de tests real: camino feliz, casos límite, un error que DEBE lanzarse, e inmutabilidad comprobada. Cuando termine en verde, tendrás lo que separa un script de un producto en el que se confía.
Reto
La red de seguridad de Mi Bolsillo
Qué debes construir
Una suite de tests para el motor de "Mi Bolsillo" usando el mini-runner del
módulo (mismo lenguaje que Vitest: test/expect/matchers). Cuando todos
pasen, la salida debe ser EXACTAMENTE:
✓ total: suma los valores de varios gastos
✓ total: una lista vacía da 0
✓ agregar: devuelve una lista NUEVA (inmutable)
✓ agregar: no muta la lista original
✓ agregar: lanza si el valor no es positivo
✓ porCategoria: agrupa y suma por categoría
---
6 pasaron, 0 fallaron
Se te entrega el motor puro (no lo cambies) y el mini-runner. Tu trabajo es
escribir los seis test:
totalcamino feliz:calcularTotalde tres gastos da su suma.totalborde vacío:calcularTotal([])da0(el caso que rompe unreducemal escrito).agregarinmutable — lista nueva:agregarGasto(lista, gasto)devuelve un array DISTINTO al original (toBeconfalsesobre la identidad, o comprobandolength).agregarinmutable — no muta: tras llamaragregarGasto, la lista original conserva sulengthintacto.agregarque lanza:agregarGastocon un gasto devalor: -5LANZA (usa untry/catchdentro del test, o un helperesperarError).porCategoria: agrupa los gastos y suma por categoría, comparando el objeto resultado contoEqual.
Reglas
- No modifiques el motor: si un test falla, el bug está en tu test (o descubriste un bug real —avísalo mentalmente).
- Cada test prueba UN concepto y tiene nombre descriptivo (ya te damos los nombres exactos arriba).
- Para el test que verifica un
throw, recuerda: la comprobación es "¿lanzó?", no "¿qué devolvió?". - Objetos y arrays se comparan con
toEqual; identidad y primitivos contoBe.
35:00
Cuando estés listo, arranca el reloj.
Qué sigue
Cierras el arsenal del ingeniero: errores, debugging y testing. Solo queda un
módulo, y es el más emocionante —el 17: proyectos completos y diez retos tipo
entrevista (de FizzBuzz a tu propio debounce). Ahí juntas los diecisiete
módulos en cosas que puedes enseñar en un portafolio. La recta final del
supercurso de JavaScript.