¿Cómo empezar a hacer Unit Testing con Jest? Guía básica

Angely Granados
6 min readOct 9, 2020

--

Empezar a hacer pruebas a nuestro código puede resultar abrumador al principio. ¿Qué necesito? ¿Qué debo probar? ¿Cuántas pruebas son muchas pruebas?

Estas son algunas de las preguntas que nos vienen a la mente cuando decidimos empezar a realizar testing en un proyecto. Por eso, en este artículo aprenderemos los pasos básicos para empezar a hacer Unit Testing con Jest.

¿Por qué hay que hacer pruebas?

El testing garantiza que el código cumple con ciertas expectativas y sigue el estándar que queremos mantener. Realizar pruebas a nuestro código, es la mejor estrategia que podemos implementar para reducir al mínimo la posibilidad de que haya errores en producción que quizás rompan tu app o que disminuyan la calidad del producto.

En la industria Tech es muy común lidiar con deadlines acelerados, donde las cosas deben implementarse lo antes posible y los errores pueden ser duramente castigados por los usuarios. Por eso, aunque pueda parecer que hacer pruebas unitarias “quita tiempo”, la verdad es que a largo plazo facilita el mantenimiento y te garantiza que tu código está haciendo lo que tú esperas que haga.

Si aun no te convences, estos son 3 motivos para hacer testing:

  • Ayuda a corregir errores en las primeras etapas del ciclo de desarrollo y a ahorrar costos.
  • Ayuda a los desarrolladores a comprender la base del código y les permite realizar cambios rápidamente (especialmente cuando llegas a un proyecto nuevo)
  • Las buenas pruebas unitarias sirven como documentación del proyecto

¿Qué son las pruebas unitarias?

Hay muchos tipos de pruebas de software y puede resultar agobiante entenderlas todas, pero en general las pruebas se dividen en tres categorías principales:

  • Pruebas unitarias
  • Pruebas de integración
  • Prueba de UI

En este caso hablaremos de las pruebas unitarias o Unit Testing, que no son más que aquellas que se realizan a pequeñas fracciones del código que puede aislarse lógicamente en un sistema, para comprobar que su output sea el esperado.

Y entonces, ¿Cómo empiezo a probar mi código?

En este artículo, solo abarcaremos los pasos básicos para empezar a realizar Unit Testing. Existen varias librerías que ayudan a realizar esta tarea, pero hoy nos centraremos en Jest.

Para configurar tu entorno para trabajar con Jest, lo primero que tienes que hacer es instalar la dependencia de desarrollo, dependiendo del manejador de paquetes que estés usando, así:

Además, debes añadir en tu ‘package.json’, la configuración de que vas a estar usando Jest para pruebas:

Configruación de Jest en el package.json

Una vez instalado, los comandos básicos para realizar pruebas son:

  • npm run test
  • yarn test

Por convención, lo ideal es que generes una carpeta llamada __test__, donde vas a ir creando la estructura de tus pruebas, tal como está organizado tu código. De esta forma, será más fácil entender a qué corresponde cada prueba que realices.

Sin embargo, esto no es obligatorio, algunos desarrolladores prefieren ubicar cada test en la carpeta donde se encuentra la función que desean probar.

Una de las pruebas más comunes es evaluar si el output de una función es equivalente a un resultado específico. Por ejemplo, en una ecuación como 1 + 1, siempre, siempre te debe dar 2. Imagina que tienes el siguiente archivo suma.js’, donde simplemente tienes una función que recibe dos inputs y devuelve el resultado de la suma.

Este es tu archivo suma.js

Si quisieras probar que esto siempre va a ejecutarse correctamente, una opción de prueba sería la siguiente. Creas tu archivo de test, que se llamará exactamente como tu archivo original, pero con una extensión ‘.test’, algo como esto:suma.test.js’

Este será tu archivo suma.test.js

En tu archivo de test, no necesitas ninguna configuración especial para empezar a usar Jest. En este caso, para probar la suma, necesitaremos traer el módulo del archivo original, lo cual hacemos en la primera línea de nuestro ejemplo:

‘const sum = require(‘./sum’);’

Luego, necesitamos utilizar la función “test” de Jest, que recibe dos parámetros. El primero, será la descripción de qué esperas que arroje tu prueba, en este caso queremos probar que “sumar 1 + 2 es igual a 3”.

En el segundo parámetro, debemos pasar una función anónima, donde se ejecutará nuestro test como tal. Con el método “expect”, básicamente le dices a la ejecución, cual es el resultado que esperas. Es decir, dentro de los paréntesis, debes pasar el output que quieres comprobar y con el método que coloques después, le dices qué esperas que sea ese output (o qué NO sea).

Así, en nuestro ejemplo: ‘expect(sum(1, 2)).toBe(3);’ lo que quiere decir es: ejecuta la función sum con estos parámetros (‘expect(sum(1,2)’)y el resultado debe ser ( ‘.toBe()’ ) 3.

Para llevar a cabo tu prueba, vas a la terminal, dentro de la carpeta del proyecto que estés trabajando y corres el comando: ‘npm run test’. Esto ejecutará todas los archivos .test que haya dentro del proyecto y te presentará los resultados en consola de la siguiente manera:

Por cada prueba que haya, te dirá si “pasó” (PASS), en qué archivo esta dicha prueba, el símbolo de check(✓) junto a la descripción que le agregaste a ese test (el primer parámetro de tu test()) y el tiempo que tardó en ejecutarse.

Métodos comunes de comparación:

  • .toBe() => usa Object.is para probar la igualdad exacta.
  • .toEqual() => comprueba recursivamente cada campo de un objeto o array.
  • .toBeNull => solo coincide con nulo
  • .toBeUndefined => coincide solo con undefined
  • .toBeDefined => es lo opuesto a toBeUndefined
  • .toBeTruthy => coincide con cualquier cosa que una declaración if trate como verdadera
  • .toBeFalsy => coincide con cualquier cosa que una declaración if trate como falsa

Comparaciones numéricas

  • .toBeGreaterThan() => mayor que
  • .toBeGreaterThanOrEqual() => mayor o igual que
  • .toBeLessThan() => menor que
  • .toBeLessThanOrEqual() => menor o igual que

Comparar cadenas de texto

  • .toMatch() => compara el string con un expresión regular
  • .not.toMatch() => compara el string con una expresión regular que NO debe estar en el texto

Iterables

  • .toContain() => chequea si un array u objeto, contiene un item particular

El tema de las pruebas unitarias es sumamente amplio, por lo que en este artículo solo abarcamos puntos básicos que sirvan para que cualquier persona pueda empezar a explorar esta librería.

Además, en la documentación oficial de Jest puedes encontrar detalladamente cada método de la librería y cientos de ejemplos útiles para guiar tu proceso de aprendizaje.

Si te pareció interesante este artículo, cuéntame en los comentarios ¿Qué librerías de testing conoces? y si ¿Utilizas Jest en tus proyectos?

--

--