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.