Resumen

Construir pruebas automatizadas es una habilidad fundamental para garantizar la calidad de cualquier proyecto en JavaScript. A continuación se explica paso a paso cómo crear una función que retorna un valor aleatorio desde un arreglo, cómo estructurar pruebas con Jest y cómo aprovechar herramientas como watch y coverage para optimizar el flujo de trabajo.

¿Cómo se construye una función randomString? [0:12]

El punto de partida es un arreglo de strings almacenado en una constante llamada cities. Este arreglo contiene nombres de ciudades como Ciudad de México, Bogotá, Lima, Buenos Aires y Guadalajara.

La función randomString se apoya en el objeto Math de JavaScript para seleccionar un elemento al azar:

javascript const cities = ['Ciudad de México', 'Bogotá', 'Lima', 'Buenos Aires', 'Guadalajara'];

function randomString() { const string = cities[Math.floor(Math.random() * cities.length)]; return string; }

module.exports = randomString;

  • Math.random() genera un número decimal aleatorio entre 0 y 1.
  • Math.floor() redondea hacia abajo para obtener un índice entero válido.
  • El resultado se multiplica por cities.length para cubrir todo el rango del arreglo.

La función se exporta como módulo con module.exports, lo que permite importarla en otros archivos del proyecto. [1:42]

¿Cómo se crean y organizan las pruebas en Jest? [2:05]

Dentro de la carpeta test se crea un archivo llamado index.test.js. La convención de nombrar los archivos con .test.js facilita que Jest los identifique automáticamente.

¿Qué es typeof y cómo se usa en una prueba? [2:30]

El operador typeof permite verificar el tipo de dato que retorna una función. En la primera prueba se comprueba que randomString devuelve efectivamente un string:

javascript const randomStrings = require('../src/index');

test('Probar la funcionalidad', () => { expect(typeof randomStrings()).toBe('string'); });

Al ejecutar npm test, Jest corre todas las pruebas disponibles y muestra los resultados en la terminal. [3:10]

¿Cómo ejecutar una sola prueba con Jest global? [3:35]

Cuando un proyecto tiene muchas pruebas, conviene ejecutar solo las necesarias. Para usar el comando jest directamente en la terminal, se instala de forma global:

bash sudo npm install -g jest

El flag -g indica instalación global, lo que habilita el comando jest en cualquier directorio. Después se puede apuntar a un archivo específico: jest test/index.test.js. [4:15]

¿Qué es describe y cómo organiza una suite de pruebas? [5:20]

describe agrupa varias pruebas relacionadas dentro de un bloque lógico, conocido como suite. Esto mejora la legibilidad del reporte:

javascript describe('Funcionalidades de randomStrings', () => { test('Retorna un string', () => { expect(typeof randomStrings()).toBe('string'); });

test('Comprobar que no existe una ciudad', () => { expect(randomStrings()).not.toMatch(/Córdoba/); }); });

El matcher not.toMatch verifica que el resultado no coincida con un patrón. Como Córdoba no está en el arreglo, la prueba pasa correctamente. [6:00]

¿Cómo automatizar la ejecución con watch y medir cobertura? [6:50]

Escribir pruebas implica cambios frecuentes. Para evitar ejecutar manualmente npm test cada vez, se agrega un script en package.json:

"scripts": { "test:watch": "jest --watch" }

Al correr npm run test:watch, Jest se queda escuchando cambios en los archivos. Cada modificación dispara automáticamente la ejecución de las pruebas, y presionar la tecla A las vuelve a lanzar todas. [7:20]

¿Qué es coverage y por qué es importante? [8:00]

El comando jest --coverage genera un reporte de cobertura que muestra qué porcentaje del código tiene pruebas asociadas. Jest crea una carpeta coverage con un archivo HTML navegable dentro de lcov-report.

  • Las líneas cubiertas aparecen resaltadas en verde.
  • Las líneas sin pruebas se marcan visualmente, indicando dónde falta cobertura.

Este reporte es clave para identificar funciones o bloques que aún no se están probando y tomar decisiones sobre dónde enfocar el esfuerzo de testing. [8:40]

Si quieres profundizar en cómo aplicar estas técnicas en un proyecto real con React, comparte tus dudas o experiencias en los comentarios.