Skip to main content
Version: 29.7

Empezando

Install Jest using your favorite package manager:

npm install --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:

npm init jest@latest

Usando Babel

To use Babel, install required dependencies:

npm install --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:

babel.config.js
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};

The ideal configuration for Babel will depend on your project. See Babel's docs for more details.

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.

babel.config.js
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.

return {
// ...
};
};
note

babel-jest is automatically installed when installing Jest and will automatically transform files if a babel configuration exists in your project. Para evitar este comportamiento, puede restablecer explícitamente la opción de configuración de transform:

jest.config.js
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.

Using 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 install --save-dev @babel/preset-typescript

Luego agrega @babel/preset-typescript a la lista de presets en tu babel.config.js.

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 install --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 install --save-dev @jest/globals

And import the APIs from it:

sum.test.ts
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);
});
});
tip

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 install --save-dev @types/jest
info

@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
}
}
]
}