Aller au contenu principal
Version: 27.0

Modules ECMAScript

Jest est livré avec le support expérimental pour les modules ECMAScript (ESM).

Notez qu'en raison de sa nature expérimentale, il existe de nombreux bogues connus ou non et fonctionnalités manquantes dans l'implémentation de Jest. Vous devriez consulter l'issue de suivi et le label sur le suivi des issues pour connaître le dernier statut.

Notez également que les API que Jest utilise pour implémenter le support ESM est toujours considéré comme expérimental par Node (à partir de la version 14.13.1).

Une fois les avertissements levés, voici comment activer le support ESM dans vos tests.

  1. Assurez-vous que vous avez soit désactivé les transformations de code en passant transform : {} ou bien configurez votre transformateur pour qu'il émette l'ESM plutôt que le CommonJS (CJS) par défaut.
  2. Exécutez node avec --experimental-vm-modules, par exemple node --experimental-vm-modules node_modules/.bin/jest ou NODE_OPTIONS=--experimental-vm-modules npx jest etc.. Sous Windows, vous pouvez utiliser cross-env pour pouvoir définir des variables d'environnement.
  3. Au-delà, nous essayons de suivre la logique de node pour activer le « mode ESM » (comme regarder type dans les fichiers package.json ou mjs), consultez leurs docs pour plus de détails.
  4. Si vous souhaitez traiter d'autres extensions de fichiers (comme ts) en tant que ESM, veuillez utiliser l'option extensionsToTreatAsEsm.

Différences entre ESM et CommonJS#

La plupart des différences sont expliquées dans la documentation de Node, mais en plus des choses qui y sont mentionnées, Jest injecte une variable spéciale dans tous les fichiers exécutés - l'objet jest. Pour accéder à cet objet dans ESM, vous devez l'importer depuis le module @jest/globals.

import {jest} from '@jest/globals';
jest.useFakeTimers();
// etc.

Veuillez noter que nous ne prenons actuellement pas en charge jest.mock d'une manière propre dans ESM, mais c'est quelque chose pour lequel nous avons l'intention d'ajouter une prise en charge appropriée à l'avenir. Suivez cette issue pour les mises à jour.