TDD en TypeScript: escribe código sin miedo ni reproches

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Deja de adivinar: por qué TDD no es masoquismo, sino un superpoder

\n\n

Imagina: escribes código. Todo funciona. Estás contento. Un mes después vuelves al proyecto, haces un pequeño cambio y todo se rompe. ¿Te suena? Ahora imagina que tienes una red de seguridad que atrapa cada error en un segundo. Eso es TDD en TypeScript — desarrollo guiado por pruebas.

\n\n

Muchos desarrolladores piensan que TDD es para perfeccionistas o para proyectos de la NASA. Spoiler: no es así. Test Driven Development es una herramienta que ahorra horas de depuración, mejora la calidad del código y hace que la refactorización sea segura. En este artículo, analizaremos TDD TypeScript con ejemplos reales, sin rodeos ni abstracciones.

\n\n

Si escribes en TypeScript y quieres dejar de temer tus propias modificaciones, sigue leyendo. Será interesante.

\n\n

¿Qué es TDD? (y por qué no se trata solo de "escribir pruebas")

\n\n

TDD (Test-Driven Development) es una metodología donde las pruebas se escriben antes que el código. ¿Suena descabellado? Solo a primera vista. El ciclo TDD consta de tres pasos:

\n\n
    \n
  1. Rojo (Red) — escribe una prueba que fallará con certeza porque el código aún no existe.
  2. \n
  3. Verde (Green) — escribe el código mínimo para que la prueba pase.
  4. \n
  5. Refactorización (Refactor) — mejora el código sin cambiar su comportamiento.
  6. \n
\n\n

Y así, en ciclo. Cada nueva pieza de funcionalidad comienza con una prueba. Esto disciplina, obliga a pensar en el diseño de la API de antemano y da la confianza de que todo funciona como un reloj.

\n\n

Por cierto, las pruebas unitarias TypeScript no son solo "verificar funciones". Son documentación, especificación y seguro en un solo paquete.

\n\n

Herramientas para TDD en TypeScript: qué instalar

\n\n

Para testing TypeScript necesitaremos:

\n\n
    \n
  • Jest — el framework de pruebas más popular. Funciona de serie con TypeScript.
  • \n
  • ts-jest — un preset para Jest para que entienda TypeScript sin configuración adicional.
  • \n
  • @types/jest — tipos para autocompletado en el IDE.
  • \n
\n\n

Instalación en un solo comando:

\n\n
npm install --save-dev jest ts-jest @types/jest typescript
\n\n

Añade en package.json el script para ejecutar las pruebas:

\n\n
"scripts": {\n  "test": "jest",\n  "test:watch": "jest --watch"\n}
\n\n

Ahora todo está listo para el desarrollo guiado por pruebas TypeScript.

\n\n

Escribimos la primera prueba con TDD: de rojo a verde

\n\n

Imaginemos que necesitamos escribir una función que verifique si una cadena es un palíndromo. Siguiendo el TDD clásico, comenzamos con la prueba.

\n\n

Paso 1. Rojo (Red)

\n\n

Creamos el archivo isPalindrome.test.ts:

\n\n
import { isPalindrome } from './isPalindrome';\n\ndescribe('isPalindrome', () => {\n  it('debe devolver true para la cadena "racecar"', () => {\n    expect(isPalindrome('racecar')).toBe(true);\n  });\n\n  it('debe devolver false para la cadena "hello"', () => {\n    expect(isPalindrome('hello')).toBe(false);\n  });\n});
\n\n

Ejecutamos la prueba:

\n\n
npm test
\n\n

Vemos un error: Cannot find module './isPalindrome'. Excelente, la fase roja está completa. Ahora necesitamos escribir el código para que la prueba pase.

\n\n

Paso 2. Verde (Green)

\n\n

Creamos isPalindrome.ts con la implementación mínima:

\n\n
export function isPalindrome(str: string): boolean {\n  return str === str.split('').reverse().join('');\n}
\n\n

Ejecutamos las pruebas de nuevo — ¡verde! Ambas pruebas pasan. Pero esto no es todo.

\n\n

Paso 3. Refactorización (Refactor)

\n\n

Nuestra función funciona, pero hay un detalle: no maneja cadenas con espacios y diferentes mayúsculas/minúsculas. Añadimos una nueva prueba:

\n\n
it('debe ignorar mayúsculas/minúsculas y espacios',                

Blogs

Book Recommendations