Javascript Logo
en español

Como hacer test unitarios en Javascript

Medio
-
2 min. lectura

Para empezar a crear test unitarios con javascript, Jest es una opción muy recomendable, bastante adoptado en la comunidad y muy sencillo de usar. 

Instalando y configurando Jest

Lo primero que necesitaremos es instalar jest como dependencia de nuestro proyecto.

Para instalar Jest, simplemente ejecuta el siguiente comando de NPM en la terminal de tu proyecto:

npm install --save-dev jest

Este comando instalará Jest como una dependencia de desarrollo en tu proyecto. La opción `--save-dev` asegura que Jest se añadirá como una dependencia de desarrollo en el archivo `package.json`, lo que significa que será utilizado únicamente durante el desarrollo y las pruebas de tu aplicación.

Como vamos a programar nuestro código con módulos ES, configuraremos Babel para que Jest pueda trabajar con estos módulos.

Babel es una librería que se encarga de transpilar nuestro código Javascript moderno en código de versiones anteriores, en nuestro caso transformará nuestros módulos ES en CommonJS

Para instalar babel necesitaremos agregar la dependencia con NPM:

npm install --save-dev babel-jest @babel/preset-env

Y configurarla creando un fichero llamado .babelrc con la siguiente configuración:

{
  "presets": ["@babel/preset-env"]
}

Y por último configuraremos Jest para que use Babel, creando un fichero llamado jest.config.json:

{
  "transform": {
    "^.+\\.js$": "babel-jest"
  }
}

Creando nuestro primer test

Ahora que hemos instalado Jest en nuestro proyecto, es hora de escribir nuestro primer test unitario. Vamos a comenzar con un ejemplo simple: cubrir una función que determina si un número es par o no.

Imagina que tenemos una función llamada esPar que toma un número como argumento y devuelve true si el número es par, y false si no lo es. Para escribir nuestro primer test unitario para esta función, crearemos un archivo llamado esPar.test.js en el mismo directorio que nuestra función esPar.

//esPar.js
export function esPar(numero) { return numero % 2 === 0; }

Y nuestro test

// esPar.test.js
import {esPar} from './esPar';

test('Comprobar si un número par retorna true', () => {
  expect(esPar(2)).toBe(true);
});

test('Comprobar si un número impar retorna false', () => {
  expect(esPar(3)).toBe(false);
});

En este código, hemos escrito dos tests utilizando la función test de Jest. Cada test verifica un escenario diferente:

  1. En el primer test, estamos comprobando si la función esPar devuelve true cuando se le pasa un número par (en este caso, 2).
  2. En el segundo test, estamos comprobando si la función esPar devuelve false cuando se le pasa un número impar (en este caso, 3).

Para ejecutar estos tests, simplemente necesitamos ejecutar Jest desde la terminal en el directorio de nuestro proyecto. Jest buscará automáticamente todos los archivos que terminen en .test.js y ejecutará los tests definidos en ellos.

npx jest

Si todo está configurado correctamente, Jest ejecutará los tests y mostrará los resultados en la terminal, de forma similar a esta:

 PASS  ./esPar.test.js
  ✓ Comprobar si un número par retorna true (2 ms)
  ✓ Comprobar si un número impar retorna false

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.279 s, estimated 1 s

Con esto hemos realizado un ejemplo básico de cómo utilizar Jest para escribir y ejecutar pruebas unitarias en JavaScript, centrándonos en la creación de un test para una función simple que determina si un número es par o impar. Aunque este ejemplo es bastante sencillo, nos ha permitido comprender los fundamentos de cómo estructurar y ejecutar pruebas unitarias con Jest.

Jest es una herramienta muy poderosa que nos brinda una amplia gama de funcionalidades para realizar pruebas más complejas y completas en nuestro código JavaScript.

Algunos ejemplos de funcionalidades de Jest:

  1. Matchers: Jest proporciona una variedad de matchers para realizar afirmaciones sobre los resultados de nuestras funciones. Por ejemplo, podemos usar toEqual() para comparar objetos, toContain() para verificar si un elemento está en un array, entre otros.
  2. Mocks: Podemos crear mocks o simulaciones de objetos y funciones para facilitar la prueba de componentes que dependen de ellos. Esto es especialmente útil para simular el comportamiento de funciones externas o de módulos complejos, como por ejemplo acceso a bases de datos.
  3. Setup y Teardown: Podemos utilizar las funciones beforeEach() y afterEach() para configurar y limpiar el estado de nuestras pruebas antes y después de cada test, respectivamente.
  4. Async Testing: Jest tiene un excelente soporte para pruebas asíncronas. Podemos utilizar async/await o las funciones then() y catch() para manejar promesas y realizar pruebas asíncronas de manera eficaz.
  5. Snapshots: También podemos crear snapshots de nuestros componentes o estructuras de datos y verificar si han cambiado desde la última ejecución de las pruebas. Esto es especialmente útil para detectar regresiones en la interfaz de usuario o en el formato de datos.

Espero haberte dado algunas ideas de como usar Jest y que lo uses activamente en tus proyectos ya que un proyecto con una buena batería de test te añadirá una capa de seguridad a la hora de realizar cambios en tu código sin temor a que se rompa.