Gabriel Jiménez | Hace alrededor de 1 mes
En este artículo aprenderemos qué es Jest, para que sirve y como podemos integrarlo con React para correr nuestras pruebas con herramientas como Vite, Create React App o NextJs.
Jest es un framework de tipo testing para Javascript, que permite escribir, ejecutar y evaluar nuestras pruebas de una forma más fácil y rápida.
NOTA: Un frameworks es un conjunto de herramientas, buenas prácticas y técnicas que en conjunto resuelven una problemática específica. En nuestro caso, esa problemática son las pruebas. Por eso decimos que es un framework de tipo testing.
Para escribir las pruebas, hay que crear un archivo de pruebas con la extensión “.test" o “.spec”. Dentro de él, usamos la palabra reservada “it” o “test” para definir cada una de nuestras pruebas.
Escribir prueba usando “it”
File: calculadora.test.js
1: it('sumar correctamente', () => {
2: });
Escribir prueba usando “test”
File: calculadora.spec.js
1: test(‘sumar correctamente', () => {
2: });
NOTA: Un archivo de pruebas, contiene el código de las pruebas para evaluar nuestro código productivo.
La evaluación de las pruebas se clasifica en dos niveles: interno y externo. El nivel interno se refiere al uso de aserciones. De forma muy general, es una condición de si algo se cumple. Por ejemplo, si sumamos 5 más 5 es igual a 10.
File: calculadora.test.js
1: it('sumar correctamente', () => {
2: expect(10).toEqual(5 + 5); // evaluación
3: });
NOTA: Existen diferentes tipos de aserciones para evaluar casi cualquier escenarios. Por ejemplo, si queremos validar si un objeto contiene una estructura específica.
Por otro lado, a nivel externo, se refiere al resultado en modo reporte al ejecutar las pruebas. Este reporte contiene información de cuantas pruebas pasaron y/o fallaron, cuanto tiempo tardaron en ejecutarse, ubicación de las pruebas ejecutadas y en caso de fallar una prueba, muestra los posibles errores.
Evaluación externa de prueba exitosa
PASS src/capitulos/Capitulo5/calculadora.test.js ✓ sumar correctamente (1 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 0.555 s, estimated 1 s
Evaluación externa de prueba fallida
FAIL src/capitulos/Capitulo5/calculadora.test.js
✕ sumar correctamente (2 ms)
● sumar correctamente
expect(received).toEqual(expected) // deep equality
Expected: 8
Received: 10
1 | it('sumar correctamente', () => {
> 2 | expect(10).toEqual(3 + 5);
| ^
3 | });
at Object.toEqual (src/capitulos/Capitulo5/calculadora.test.js:2:14)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 0.64 s, estimated 1 s
Para ejecutar las pruebas en Jest, usamos el comando “jest”. Además, tenemos varias opciones para ejecutar nuestras pruebas: ejecutar todas las pruebas dentro del proyecto, solo las pruebas dentro de un archivo de pruebas específico o una prueba en específico dentro de un archivo de pruebas específico.
Ejecutar todas las pruebas dentro del proyecto
./node_modules/jest/bin/jest.js
Ejecutar las pruebas de un archivo de pruebas en específico
./node_modules/jest/bin/jest.js calculadora.test.js
Ejecutar una prueba en particular dentro de un archivo de pruebas específico
./node_modules/jest/bin/jest.js calculadora.test.js —t “suma correctamente"
NOTA: Sin embargo, dependiendo como configuremos Jest, el comando para ejecutar las pruebas puede ser diferente. Por ejemplo, con la herramienta Create React App, el comando es “npm test”.
Cuando creamos nuestras aplicaciones React, elegimos herramientas como Vite o NextJs, para agilizar el proceso de desarrollo. Muchas de estás herramientas, ya tienen contemplado el uso de Jest con React para ejecutar nuestras pruebas frontend.
Veamos algunas de estas herramientas y sus configuraciones.
Es una herramienta para crear aplicaciones simple page o más conocidas como SSR.
¿Requiere configuración extra para ejecutar Jest + React?
No, todo listo para correr las pruebas desde el inicio.
npx create-react-app my-app cd my-app npm test
NOTA: No se recomienda usar Create React App para crear aplicaciones modernas.
Es una herramienta para crear aplicaciones web React modernas.
¿Requiere configuración extra para ejecutar Jest + React?
Si, pero puedes instalarlo fácilmente.
npx create-next-app@latest my-app --example with-jest cd my-app npm run test
Es una herramienta para creaciones aplicaciones frontend modernas, permite usar las librerías frontend más populares como React, VUE.
NOTA: Vite no es compatible para integrarse directamente con Jest, para eso existe el runner test “vitest”. Sin embargo, si podemos usar Jest + Babel para correr nuestras pruebas.
¿Requiere configuración extra para ejecutar Jest + React?
Si
1. Instalar Jest, Testing Library y Babel
npm install --save-dev jest @testing-library/react @testing-library/jest-dom babel-jest @babel/preset-env @babel/preset-react
2. Configurar Babel
// babel.config.cjs
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 'current' } }],
['@babel/preset-react', { runtime: 'automatic' }],
],
}
3. Configurar Jest
De forma muy general, se configura para que babel pueda transformar archivos modernos de “js” en código que Node entienda. Además, configuramos la nomenclatura de los archivos de prueba para que Jest entiende que esos archivos contienen código de pruebas (.spec.js y .test.js)
// jest.config.cjs
module.exports = {
testEnvironment: 'jsdom',
setupFilesAfterEnv: ['<rootDir>/src/test/setup.js'],
transform: {
'^.+\\.(js|jsx)$': 'babel-jest',
},
testMatch: [
'**/__tests__/**/*.test.js?(x)',
'**/?(*.)+(spec|test).js?(x)',
],
}
4. Instalar jsdom
A grandes rasgos permite crear un navegador ficticio para correr nuestras pruebas en un entorno Node.
npm install --save-dev jest-environment-jsdom
Jest es una framework enfocado específicamente a trabajar con tus pruebas. Muchas de las herramientas para crear aplicaciones web modernas, ya están pensadas para utilizar Jest, ya sea desde el inicio o realizando algunas configuraciones extras.