Pruebas en TypeScript: Guía completa de frameworks y herramientas

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

Pruebas en TypeScript: Frameworks y herramientas para un desarrollo de calidad



TypeScript es un lenguaje potente que añade tipado estático a JavaScript. Sin embargo, incluso los tipos estrictos no garantizan la ausencia de errores lógicos. Para garantizar la fiabilidad del código, es necesario utilizar pruebas. En este artículo, analizaremos las herramientas y frameworks clave para probar aplicaciones TypeScript: desde pruebas unitarias hasta pruebas de extremo a extremo (E2E).



¿Por qué probar el código TypeScript?

El compilador de TypeScript detecta errores de tipos, pero no verifica la lógica de negocio. Las pruebas ayudan a:

  • Detectar regresiones durante la refactorización
  • Documentar el comportamiento esperado de las funciones
  • Acelerar las revisiones de código mediante verificación automática
  • Aumentar la confianza en el funcionamiento de la aplicación


Categorías principales de pruebas

  • Pruebas unitarias — verificación de funciones, clases o módulos individuales.
  • Pruebas de integración — interacción entre módulos (por ejemplo, con una base de datos).
  • Pruebas E2E — simulación de acciones del usuario en el navegador.


1. Jest — framework universal para pruebas unitarias

Jest de Facebook es la opción más popular para TypeScript. Funciona "de fábrica": no requiere configuración compleja, tiene un motor de mocks integrado e informe de cobertura de código.



Instalación:

npm install --save-dev jest @types/jest ts-jest

Añada en jest.config.ts:

export default {  preset: 'ts-jest',  testEnvironment: 'node',};


Ejemplo de prueba unitaria para una función:

// math.tsexport const add = (a: number, b: number): number => a + b;

// math.test.tsimport { add } from './math';

describe('add', () => { it('should return sum of two numbers', () => { expect(add(2, 3)).toBe(5); });

it('should handle negative numbers', () => { expect(add(-1, -2)).toBe(-3); });});


Mocks en Jest:

// api.tsexport const fetchData = async (id: string) => {  const response = await fetch(`/api/${id}`);  return response.json();};

// api.test.tsjest.mock('./api', () => ({ fetchData: jest.fn().mockResolvedValue({ id: '1', name: 'Test' }),}));

import { fetchData } from './api';

test('should return mocked data', async () => { const data = await fetchData('1'); expect(data.name).toBe('Test');});


2. Mocha + Chai — alternativa flexible

Mocha es un test-runner que ofrece control total sobre el proceso. Chai añade aserciones expresivas.



Instalación:

npm install --save-dev mocha chai @types/mocha @types/chai ts-node


Ejemplo de prueba de integración con asincronía:

// database.tsexport class Database {  async getUser(id: number): Promise<{ id: number; name: string }> {    // simulación de consulta    return { id, name: 'Alice' };  }}

// database.test.tsimport { expect } from 'chai';import { Database } from './database';

describe('Database', () => { it('should return user by id', async () => { const db = new Database(); const user = await db.getUser(1); expect(user).to.have.property('name', 'Alice'); });});


Para ejecutar, use el comando mocha --require ts-node/register src/**/*.test.ts.



3. Cypress — pruebas E2E para aplicaciones web

Cypress es ideal para probar el frontend con TypeScript. Funciona en un navegador real y tiene una interfaz GUI conveniente.



Instalación:

npm install --save-dev cypress @cypress/types


Ejemplo de prueba E2E para una página de inicio de sesión

Recommendations