Premiers pas
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Installez Jest avec votre gestionnaire de paquets préféré :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
bun add --dev jest
Commençons par écrire un test pour une fonction hypothétique additionnant deux nombres. Créez d'abord un fichier sum.js :
function sum(a, b) {
return a + b;
}
module.exports = sum;
Puis créez un fichier nommé sum.test.js. Il contiendra notre test réel :
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Ajoutez la section suivante à votre package.json :
{
"scripts": {
"test": "jest"
}
}
Enfin, exécutez yarn test ou npm test et Jest affichera ce message :
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)
Vous venez d'écrire votre premier test avec succès en utilisant Jest !
Ce test utilise expect et toBe pour vérifier que deux valeurs sont strictement identiques. Pour découvrir les autres fonctionnalités de test de Jest, consultez Utilisation des matchers.
Exécution en ligne de commande
Vous pouvez exécuter Jest directement via l'interface CLI (s'il est disponible globalement dans votre PATH, par exemple avec yarn global add jest ou npm install jest --global) avec diverses options utiles.
Voici comment exécuter Jest sur les fichiers correspondant à my-test, en utilisant config.json comme fichier de configuration et afficher une notification système après l'exécution :
jest my-test --notify --config=config.json
Pour en savoir plus sur l'utilisation de jest en ligne de commande, consultez la page Options CLI de Jest.
Configuration supplémentaire
Générer un fichier de configuration de base
Selon votre projet, Jest vous posera quelques questions et créera un fichier de configuration de base avec une brève description pour chaque option :
- npm
- Yarn
- pnpm
- Bun
npm init jest@latest
yarn create jest
pnpm create jest
bunx create-jest
Utilisation avec Babel
Pour utiliser Babel, installez les dépendances nécessaires :
- npm
- Yarn
- pnpm
- Bun
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
bun add --dev babel-jest @babel/core @babel/preset-env
Configurez Babel pour cibler votre version actuelle de Node en créant un fichier babel.config.js à la racine de votre projet :
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
La configuration idéale de Babel dépendra de votre projet. Consultez la documentation de Babel pour plus de détails.
Making your Babel config jest-aware
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 is automatically installed when installing Jest and will automatically transform files if a babel configuration exists in your project. To avoid this behavior, you can explicitly reset the transform configuration option:
module.exports = {
transform: {},
};
Utilisation avec des bundlers
La plupart du temps, aucune action particulière n'est requise pour travailler avec différents bundlers, sauf si vous avez un plugin ou une configuration générant des fichiers ou implémentant des règles de résolution personnalisées.
Utilisation avec webpack
Jest peut être utilisé dans des projets exploitant webpack pour gérer les ressources, styles et la compilation. webpack présente cependant des défis spécifiques. Référez-vous au guide webpack pour commencer.
Utilisation avec Vite
Jest n'est pas pris en charge par Vite en raison d'incompatibilités avec le système de plugins de Vite.
Des exemples d'intégration de Jest avec Vite sont disponibles dans la bibliothèque vite-jest. Cependant, cette bibliothèque n'est pas compatible avec les versions de Vite ultérieures à la 2.4.2.
Une alternative est Vitest qui propose une API compatible avec Jest.
Utilisation avec Parcel
Jest peut être utilisé dans des projets utilisant parcel-bundler pour gérer les ressources, styles et compilation, similairement à webpack. Parcel ne nécessite aucune configuration. Consultez la documentation officielle pour commencer.
Utilisation avec TypeScript
Via babel
Jest prend en charge TypeScript via Babel. Assurez-vous d'abord d'avoir suivi les instructions sur l'utilisation de Babel ci-dessus. Ensuite, installez @babel/preset-typescript :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
bun add --dev @babel/preset-typescript
Ajoutez ensuite @babel/preset-typescript à la liste des presets dans votre babel.config.js.
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
Cependant, il existe certaines mises en garde lors de l'utilisation de TypeScript avec Babel. Comme la prise en charge de TypeScript dans Babel se limite à la transpilation, Jest ne vérifiera pas les types de vos tests lors de leur exécution. Si vous avez besoin de cette fonctionnalité, vous pouvez utiliser ts-jest à la place, ou simplement exécuter le compilateur TypeScript tsc séparément (ou dans le cadre de votre processus de build).
Via ts-jest
ts-jest est un préprocesseur TypeScript avec support des source maps pour Jest qui vous permet d'utiliser Jest pour tester des projets écrits en TypeScript.
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
bun add --dev ts-jest
Pour que Jest transpile TypeScript avec ts-jest, vous devrez peut-être créer un fichier de configuration.
Définitions de types
Il existe deux méthodes pour typer les API globales de Jest dans les fichiers de test écrits en TypeScript.
Vous pouvez utiliser les d éfinitions de types fournies avec Jest, qui seront mises à jour à chaque mise à jour de Jest. Installez le package @jest/globals :
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
bun add --dev @jest/globals
Et importez les API depuis celui-ci :
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);
});
});
Consultez la documentation supplémentaire sur l'utilisation de describe.each/test.each et des mock functions.
Vous pouvez également choisir d'installer le package @types/jest. Il fournit des types pour les globales Jest sans nécessiter d'importation.
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
bun add --dev @types/jest
@types/jest est une bibliothèque tierce maintenue sur DefinitelyTyped, donc les dernières fonctionnalités ou versions de Jest peuvent ne pas être couvertes immédiatement. Essayez de faire correspondre les versions de Jest et de @types/jest le plus précisément possible. Par exemple, si vous utilisez Jest 27.4.0, installer 27.4.x de @types/jest est idéal.
Utilisation avec ESLint
Jest peut être utilisé avec ESLint sans configuration supplémentaire à condition d'importer les helpers globaux Jest (describe, it, etc.) depuis @jest/globals avant de les utiliser dans votre fichier de test. Ceci est nécessaire pour éviter les erreurs no-undef d'ESLint, qui ne connaît pas les globales Jest.
Si vous souhaitez éviter ces imports, vous pouvez configurer votre environnement ESLint pour supporter ces globales en ajoutant l'environnement jest :
import {defineConfig} from 'eslint/config';
import globals from 'globals';
export default defineConfig([
{
files: ['**/*.js'],
languageOptions: {
globals: {
...globals.jest,
},
},
rules: {
'no-unused-vars': 'warn',
'no-undef': 'warn',
},
},
]);
Ou utiliser eslint-plugin-jest, qui produit un effet similaire :
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}