CodeForge

JavaScript de Cero a Experto / Testing con Vitest

Reto: la red de seguridad de Mi Bolsillo

Reto40 min60 XP

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

Media35 min60 XP(×2 sin mirar la solución)

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:

terminal

✓ 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:

  1. total camino feliz: calcularTotal de tres gastos da su suma.
  2. total borde vacío: calcularTotal([]) da 0 (el caso que rompe un reduce mal escrito).
  3. agregar inmutable — lista nueva: agregarGasto(lista, gasto) devuelve un array DISTINTO al original (toBe con false sobre la identidad, o comprobando length).
  4. agregar inmutable — no muta: tras llamar agregarGasto, la lista original conserva su length intacto.
  5. agregar que lanza: agregarGasto con un gasto de valor: -5 LANZA (usa un try/catch dentro del test, o un helper esperarError).
  6. porCategoria: agrupa los gastos y suma por categoría, comparando el objeto resultado con toEqual.

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 con toBe.

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.