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:

# Usando npm
npm install --save-dev jest

# Usando yarn
yarn add --dev jest

Configuración del Script de Pruebas

Agrega un script en tu package.json para ejecutar Jest:

{
  "scripts": {
    "test": "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.js
function sum(a, b) {
  return a + b;
}

module.exports = sum;
// 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

  1. sum.js: Define una función sum que toma dos argumentos y devuelve su suma.
  2. sum.test.js: Importa la función sum y define una prueba que verifica si sum(1, 2) es igual a 3.

Ejecutando las Pruebas

Para ejecutar las pruebas, simplemente corre el siguiente comando en tu terminal:

npm test

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 ===).

test('dos más dos es cuatro', () => {
  expect(2 + 2).toBe(4);
});

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.

test('verdadero o falso', () => {
  expect(true).toBeTruthy();
  expect(false).toBeFalsy();
});

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

  1. Crea una función multiply que tome dos números y devuelva su producto.
  2. Escribe una prueba para verificar que multiply(2, 3) devuelve 6.
// multiply.js
function multiply(a, b) {
  return a * b;
}

module.exports = multiply;
// 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

  1. Crea una función fetchUser que simule una llamada a una API y devuelva un objeto de usuario.
  2. 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

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Objetos y Arrays

Módulo 5: Objetos y Funciones Avanzadas

Módulo 6: El Modelo de Objetos del Documento (DOM)

Módulo 7: APIs del Navegador y Temas Avanzados

Módulo 8: Pruebas y Depuración

Módulo 9: Rendimiento y Optimización

Módulo 10: Frameworks y Librerías de JavaScript

Módulo 11: Proyecto Final

© Copyright 2024. Todos los derechos reservados