Introducción
Las pruebas unitarias son una parte esencial del desarrollo de software, ya que permiten verificar que las unidades individuales de código (como funciones y métodos) funcionan correctamente. Jest es un framework de pruebas de JavaScript desarrollado por Facebook, que se utiliza principalmente para probar aplicaciones de React, pero también es adecuado para cualquier proyecto de JavaScript.
En esta sección, aprenderás a configurar Jest, escribir pruebas unitarias básicas y ejecutar esas pruebas para asegurarte de que tu código funcione como se espera.
Configuración de Jest
Instalación
Para comenzar a usar Jest, primero necesitas instalarlo en tu proyecto. Puedes hacerlo utilizando npm o yarn:
Configuración del Script de Pruebas
Agrega un script en tu package.json
para ejecutar Jest:
Escribiendo Pruebas Unitarias
Estructura Básica de una Prueba
Las pruebas en Jest se escriben utilizando funciones como test
o it
. Aquí hay un ejemplo básico:
// sum.test.js const sum = require('./sum'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
Explicación del Código
- sum.js: Define una función
sum
que toma dos argumentos y devuelve su suma. - sum.test.js: Importa la función
sum
y define una prueba que verifica sisum(1, 2)
es igual a3
.
Ejecutando las Pruebas
Para ejecutar las pruebas, simplemente corre el siguiente comando en tu terminal:
Métodos de Expectación
Jest proporciona varios métodos de expectación para verificar diferentes condiciones. Aquí hay algunos ejemplos comunes:
toBe
Verifica que el valor sea exactamente igual (usando ===
).
toEqual
Verifica que los objetos o arrays sean iguales en estructura y contenido.
test('objeto de asignación', () => { const data = { uno: 1 }; data['dos'] = 2; expect(data).toEqual({ uno: 1, dos: 2 }); });
toBeNull, toBeUndefined, toBeDefined
Verifica valores nulos, indefinidos o definidos.
test('nulo', () => { const n = null; expect(n).toBeNull(); expect(n).toBeDefined(); expect(n).not.toBeUndefined(); });
toBeTruthy, toBeFalsy
Verifica valores verdaderos o falsos.
Pruebas Asíncronas
Jest también soporta pruebas asíncronas. Puedes usar async/await
o promesas para manejar código asíncrono.
Usando async/await
// fetchData.js const fetchData = async () => { return 'peanut butter'; }; module.exports = fetchData;
// fetchData.test.js const fetchData = require('./fetchData'); test('los datos son peanut butter', async () => { const data = await fetchData(); expect(data).toBe('peanut butter'); });
Usando Promesas
test('los datos son peanut butter', () => { return fetchData().then(data => { expect(data).toBe('peanut butter'); }); });
Ejercicios Prácticos
Ejercicio 1: Prueba de una Función de Multiplicación
- Crea una función
multiply
que tome dos números y devuelva su producto. - Escribe una prueba para verificar que
multiply(2, 3)
devuelve6
.
// multiply.test.js const multiply = require('./multiply'); test('multiplica 2 * 3 para igualar 6', () => { expect(multiply(2, 3)).toBe(6); });
Ejercicio 2: Prueba de una Función Asíncrona
- Crea una función
fetchUser
que simule una llamada a una API y devuelva un objeto de usuario. - Escribe una prueba para verificar que
fetchUser
devuelve el objeto de usuario correcto.
// fetchUser.js const fetchUser = async () => { return { name: 'John Doe', age: 30 }; }; module.exports = fetchUser;
// fetchUser.test.js const fetchUser = require('./fetchUser'); test('los datos del usuario son correctos', async () => { const user = await fetchUser(); expect(user).toEqual({ name: 'John Doe', age: 30 }); });
Conclusión
En esta sección, has aprendido a configurar Jest, escribir pruebas unitarias básicas y ejecutar esas pruebas. También has visto cómo manejar pruebas asíncronas y utilizar diferentes métodos de expectación. Las pruebas unitarias son una herramienta poderosa para asegurar la calidad de tu código y facilitar el mantenimiento a largo plazo.
En el siguiente módulo, profundizaremos en las pruebas de integración, donde aprenderás a probar cómo interactúan diferentes partes de tu aplicación entre sí.
JavaScript: De Principiante a Avanzado
Módulo 1: Introducción a JavaScript
- ¿Qué es JavaScript?
- Configuración de tu Entorno de Desarrollo
- Tu Primer Programa en JavaScript
- Sintaxis y Conceptos Básicos de JavaScript
- Variables y Tipos de Datos
- Operadores Básicos
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for, while, do-while
- Sentencias Switch
- Manejo de Errores con try-catch
Módulo 3: Funciones
- Definición y Llamada de Funciones
- Expresiones de Función y Funciones Flecha
- Parámetros y Valores de Retorno
- Ámbito y Closures
- Funciones de Orden Superior
Módulo 4: Objetos y Arrays
- Introducción a los Objetos
- Métodos de Objeto y la Palabra Clave 'this'
- Arrays: Conceptos Básicos y Métodos
- Iteración sobre Arrays
- Desestructuración de Arrays
Módulo 5: Objetos y Funciones Avanzadas
- Prototipos y Herencia
- Clases y Programación Orientada a Objetos
- Módulos e Importación/Exportación
- JavaScript Asíncrono: Callbacks
- Promesas y Async/Await
Módulo 6: El Modelo de Objetos del Documento (DOM)
- Introducción al DOM
- Selección y Manipulación de Elementos del DOM
- Manejo de Eventos
- Creación y Eliminación de Elementos del DOM
- Manejo y Validación de Formularios
Módulo 7: APIs del Navegador y Temas Avanzados
- Almacenamiento Local y de Sesión
- Fetch API y AJAX
- WebSockets
- Service Workers y Aplicaciones Web Progresivas (PWAs)
- Introducción a WebAssembly
Módulo 8: Pruebas y Depuración
- Depuración de JavaScript
- Pruebas Unitarias con Jest
- Pruebas de Integración
- Pruebas de Extremo a Extremo con Cypress
Módulo 9: Rendimiento y Optimización
- Optimización del Rendimiento de JavaScript
- Gestión de Memoria
- Manipulación Eficiente del DOM
- Carga Perezosa y División de Código
Módulo 10: Frameworks y Librerías de JavaScript
- Introducción a React
- Gestión de Estado con Redux
- Conceptos Básicos de Vue.js
- Conceptos Básicos de Angular
- Elegir el Framework Adecuado