Empezando
Instale Jest usando su administrador de paquetes favorito:
- npm
- Yarn
- pnpm
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
Empecemos escribiendo una prueba para una función hipotética que suma dos números. Primero, crea un archivo suma.js
:
function suma(a, b) {
return a + b;
}
module.exports = suma;
Luego, crea un archivo llamado suma.test.js
. Este contendrá nuestra prueba actual:
const suma = require('./suma');
test('sumar 1 + 2 es igual a 3', () => {
expect(suma(1, 2)).toBe(3);
});
Agrega la siguiente sección a tu package.json
:
{
"scripts": {
"test": "jest"
}
}
Finalmente, ejecuta yarn test
o npm test
y Jest imprimirá en la pantalla este mensaje:
PASS ./suma.test.js
✓ sumar 1 + 2 es igual a 3 (5ms)
¡Acabas de escribir tu primera prueba usando Jest!
Esta prueba usa expect
y toBe
para probar que dos valores son exactamente idénticos. Para aprender sobre otras cosas que Jest puede probar, mira Usando Matchers.
Ejecutando desde la línea de comandos
Puedes ejecutar Jest directamente desde la CLI (si está disponible globalmente en tu PATH
, p.e. con yarn global add jest
o npm install jest --global
) con varias opciones útiles.
Así es como puedes correr Jest en archivos que coinciden my-test
, usando config.json
como archivo de configuración y mostrar una notificación nativa del SO después de ejecutarlo:
jest my-test --notify --config=config.json
Si quieres aprender más sobre correr jest
a través de la línea de comandos, hecha una mirada a la página de Opciones de Jest CLI.
Configuración Adicional
Genera un fichero de configuración básico
Basado en tu proyecto, Jest te hará algunas preguntas y creará un archivo de configuración básica con una corta descripción por cada opción:
jest --init
Usando Babel
Para usar Babel, instale las dependencias requeridas:
- npm
- Yarn
- pnpm
npm install --save-dev babel-jest @babel/core @babel/preset-env
yarn add --dev babel-jest @babel/core @babel/preset-env
pnpm add --save-dev babel-jest @babel/core @babel/preset-env
Configura Babel para tu versión actual de Node creando un fichero babel.config.js
en la raíz de tu proyecto:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
La configuración ideal para Babel dependerá de tu proyecto. Consulte la documentación de Babel para obtener más detalles.
Haz que tu configuración de Babel sepa que usas Jest
Jest will set process.env.NODE_ENV
to 'test'
if it's not set to something else. You can use that in your configuration to conditionally setup only the compilation needed for Jest, e.g.
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
babel-jest
se instala automáticamente al instalar Jest y transformará automáticamente los archivos si existe una configuración de Babel en su proyecto. Para evitar este comportamiento, puede restablecer explícitamente la opción de configuración de transform
:
module.exports = {
transform: {},
};
Usando webpack
Jest puede ser usado en proyectos que usan webpack para gestionar recursos, estilos y compilación. webpack ofrece desafíos únicos sobre otras herramientas. Consulta la documentación oficial para comenzar.
Usando Vite
Jest can be used in projects that use vite to serve source code over native ESM to provide some frontend tooling, vite is an opinionated tool and does offer some out-of-the box workflows. Jest is not fully supported by vite due to how the plugin system from vite works, but there are some working examples for first-class jest integration using vite-jest
, since this is not fully supported, you might as well read the limitation of the vite-jest
. Refer to the vite guide to get started.
Using Parcel
Jest puede ser usado en proyectos que usan parcel para gestionar recursos, estilos y compilación. webpack ofrece desafíos únicos por sobre otras herramientas. Refer to the official docs to get started.
Usando TypeScript
Via babel
Jest soporta TypeScript, a través de Babel. Primero, asegúrate de haber seguido las intrucciones en Usando Babel de arriba. Next, install the @babel/preset-typescript
:
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
Luego agrega @babel/preset-typescript
a la lista de presets en tu babel.config.js
.
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
Existen algunas cosas que debes tener en cuenta cuando uses TypeScript con Babel. Dado que el soporte de TypeScript en Babel se limita a la transpilación, Jest no comprobará los tipos de tus tests cuando éstos se ejecuten. Si lo deseas, puedes utilizar ts-jest o simplemente ejecutar el compilador de TypeScript por separado (como parte del proceso de compilación).
Via ts-jest
ts-jest is a TypeScript preprocessor with source map support for Jest that lets you use Jest to test projects written in TypeScript.
- npm
- Yarn
- pnpm
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
In order for Jest to transpile TypeScript with ts-jest
, you may also need to create a configuration file.
Type definitions
There are two ways to have Jest global APIs typed for test files written in TypeScript.
You can use type definitions which ships with Jest and will update each time you update Jest. Install the @jest/globals
package:
- npm
- Yarn
- pnpm
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
And import the APIs from it:
import {describe, expect, test} from '@jest/globals';
import {sum} from './sum';
describe('sum module', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
});
See the additional usage documentation of describe.each
/test.each
and mock functions
.
Or you may choose to install the @types/jest
package. It provides types for Jest globals without a need to import them.
- npm
- Yarn
- pnpm
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
@types/jest
is a third party library maintained at DefinitelyTyped, hence the latest Jest features or versions may not be covered yet. Try to match versions of Jest and @types/jest
as closely as possible. For example, if you are using Jest 27.4.0
then installing 27.4.x
of @types/jest
is ideal.
Using ESLint
Jest can be used with ESLint without any further configuration as long as you import the Jest global helpers (describe
, it
, etc.) from @jest/globals
before using them in your test file. This is necessary to avoid no-undef
errors from ESLint, which doesn't know about the Jest globals.
If you'd like to avoid these imports, you can configure your ESLint environment to support these globals by adding the jest
environment:
{
"overrides": [
{
"files": ["tests/**/*"],
"env": {
"jest": true
}
}
]
}
Or use eslint-plugin-jest
, which has a similar effect:
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}