web-dev-qa-db-fra.com

Configuration de Jest pour imiter Webpack, résolution de la racine et résolution de l'alias

Je travaille sur la mise en place d'un projet avec Webpack & Jest. À l'heure actuelle, les configurations de résolution de Webpack entraînent des complications avec les tests Jest. Dans ma configuration webpack, les options suivantes sont définies:

  resolve: {
    root: [__dirname + "/src/" ],
    extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg']
  }

Cela me permet d’avoir besoin d’actifs et de modules avec:

import UnknownImg from 'assets/unknown';

Ce qui précède vit réellement (par rapport à la racine de mon projet) src/assets/unknown.svg

Cependant, lorsque je lance le test pour les fichiers avec des lignes comme celles ci-dessus, des erreurs se produisent lors de la résolution du chemin d'accès au module/actif requis.

Error: /Users/byronsm/dev/nerve-center/src/components/organisms/system_status.jsx: Cannot find module 'assets/unknown' from '/Users/byronsm/dev/nerve-center/src/components/organisms'

Dans ce cas, il semble effectuer une recherche relative du chemin de module importé. Y at-il un moyen pour que Jest se comporte de la même manière que Webpack?

14
Krustal

Une solution est maintenant fournie dans les documents officiels Jest. Voir Tutoriel Webpack .

En bref, ajoutez l’option modulePaths à votre config de jest inpackage.json:

"jest": {
    "modulePaths": ["src"], 
    ...
}
28
Rob Squires

Vous pouvez utiliser l'option Jest 20+ resolver et le brancher avec jest-webpack-resolver

Ce paquet ne semble pas mature (plusieurs jours) mais fait le travail pour moi. En outre, à partir de maintenant, Jest config doit figurer dans un fichier jest.config.js séparé ou fourni via l'interface de ligne de commande (ne supporte pas package.json).

2
kompot

Après une bonne nuit de repos, j’ai regardé à nouveau et réalisé que ce n’était pas une configuration Jest mais un nœud. Le meilleur moyen d'imiter le comportement de la configuration de resol.root dans Webpack consiste à définir la variable d'environnement NODE_PATH dans le même répertoire lors de l'exécution de jest:

NODE_PATH=src jest

Cela ne résout pas vraiment le problème de plusieurs annuaires, cela a résolu mon problème. Cet article m'a aidé à comprendre un peu mieux la solution https://Gist.github.com/branneman/8048520 .

2
Krustal

Jestpack vise à résoudre ce problème en construisant vos fichiers de test avec Webpack avant de les exécuter avec Jest. Cela signifie que toutes les règles de résolution de module spéciales ou les chargeurs de votre configuration Webpack fonctionneront exactement de la même manière que votre version de production.

1
riscarrott

Jest version 23.6.0:

Ajouter cette ligne à jest.config.js

moduleDirectories: ["node_modules", "src"],

ou en package.json

"jest": {
    "moduleDirectories": ["node_modules", "src"], 
    ...
}
1
Said Kholov

J'ai écrit mimic-webpack pour prendre une configuration de WebPack et se connecter à un nœud, afin de résoudre des chemins similaires à ceux de WebPack. Je ne l'ai pas testé avec plaisanterie, mais cela devrait fonctionner avec n'importe quel exécuteur de spécifications s'exécutant sur un nœud et prenant même en charge des chargeurs simples.

1
Thomas Hallock