Las pruebas de código son una parte esencial del desarrollo de software, ya que aseguran que el código funcione como se espera y ayuda a prevenir errores en el futuro. En este tema, aprenderemos cómo escribir y ejecutar pruebas en TypeScript utilizando herramientas populares como Jest y Mocha.

Contenido

Introducción a las Pruebas

Las pruebas de software se dividen en varias categorías, pero las más comunes son:

  • Pruebas Unitarias: Verifican el funcionamiento de una unidad individual de código (por ejemplo, una función o un método).
  • Pruebas de Integración: Verifican la interacción entre diferentes unidades de código.
  • Pruebas de Sistema: Verifican el sistema completo para asegurarse de que cumple con los requisitos.

En este tema, nos centraremos principalmente en las pruebas unitarias.

Configuración del Entorno de Pruebas

Instalación de Jest

Jest es un framework de pruebas popular para JavaScript y TypeScript. Para instalar Jest en un proyecto TypeScript, sigue estos pasos:

  1. Inicializa un proyecto Node.js (si aún no lo has hecho):

    npm init -y
    
  2. Instala Jest y sus tipos para TypeScript:

    npm install --save-dev jest @types/jest ts-jest
    
  3. Configura Jest: Crea un archivo de configuración jest.config.js en la raíz del proyecto:

    module.exports = {
      preset: 'ts-jest',
      testEnvironment: 'node',
    };
    

Instalación de Mocha

Mocha es otro framework de pruebas popular. Para instalar Mocha en un proyecto TypeScript, sigue estos pasos:

  1. Instala Mocha y Chai:

    npm install --save-dev mocha chai @types/mocha @types/chai ts-node
    
  2. Configura Mocha: Crea un archivo de configuración mocha.opts en la carpeta test:

    --require ts-node/register
    --require source-map-support/register
    --recursive
    

Escribiendo Pruebas con Jest

Ejemplo de Prueba Unitaria

Supongamos que tenemos una función sum en un archivo sum.ts:

// sum.ts
export function sum(a: number, b: number): number {
  return a + b;
}

Podemos escribir una prueba unitaria para esta función en un archivo sum.test.ts:

// sum.test.ts
import { sum } from './sum';

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Ejecutar las Pruebas

Para ejecutar las pruebas, simplemente usa el comando:

npx jest

Escribiendo Pruebas con Mocha

Ejemplo de Prueba Unitaria

Supongamos que tenemos la misma función sum en un archivo sum.ts:

// sum.ts
export function sum(a: number, b: number): number {
  return a + b;
}

Podemos escribir una prueba unitaria para esta función en un archivo sum.test.ts:

// sum.test.ts
import { expect } from 'chai';
import { sum } from './sum';

describe('sum function', () => {
  it('should add 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).to.equal(3);
  });
});

Ejecutar las Pruebas

Para ejecutar las pruebas, simplemente usa el comando:

npx mocha

Ejercicios Prácticos

Ejercicio 1: Prueba de una Función de Multiplicación

  1. Crea una función multiply en un archivo multiply.ts que multiplique dos números.
  2. Escribe una prueba unitaria para la función multiply usando Jest.
  3. Escribe una prueba unitaria para la función multiply usando Mocha.

Solución

// multiply.ts
export function multiply(a: number, b: number): number {
  return a * b;
}

Prueba con Jest:

// multiply.test.ts
import { multiply } from './multiply';

test('multiplies 2 * 3 to equal 6', () => {
  expect(multiply(2, 3)).toBe(6);
});

Prueba con Mocha:

// multiply.test.ts
import { expect } from 'chai';
import { multiply } from './multiply';

describe('multiply function', () => {
  it('should multiply 2 * 3 to equal 6', () => {
    expect(multiply(2, 3)).to.equal(6);
  });
});

Ejercicio 2: Prueba de una Función de División

  1. Crea una función divide en un archivo divide.ts que divida dos números.
  2. Escribe una prueba unitaria para la función divide usando Jest.
  3. Escribe una prueba unitaria para la función divide usando Mocha.

Solución

// divide.ts
export function divide(a: number, b: number): number {
  if (b === 0) {
    throw new Error('Cannot divide by zero');
  }
  return a / b;
}

Prueba con Jest:

// divide.test.ts
import { divide } from './divide';

test('divides 6 / 2 to equal 3', () => {
  expect(divide(6, 2)).toBe(3);
});

test('throws error when dividing by zero', () => {
  expect(() => divide(6, 0)).toThrow('Cannot divide by zero');
});

Prueba con Mocha:

// divide.test.ts
import { expect } from 'chai';
import { divide } from './divide';

describe('divide function', () => {
  it('should divide 6 / 2 to equal 3', () => {
    expect(divide(6, 2)).to.equal(3);
  });

  it('should throw error when dividing by zero', () => {
    expect(() => divide(6, 0)).to.throw('Cannot divide by zero');
  });
});

Conclusión

En esta sección, hemos aprendido cómo configurar un entorno de pruebas para TypeScript utilizando Jest y Mocha. También hemos visto cómo escribir y ejecutar pruebas unitarias para funciones simples. Las pruebas son una herramienta poderosa para asegurar la calidad del código y deben ser una parte integral de cualquier proyecto de software.

En el siguiente módulo, exploraremos cómo integrar TypeScript con herramientas de construcción y frameworks populares como Webpack y React.

© Copyright 2024. Todos los derechos reservados