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?
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"],
...
}
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
).
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 .
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.
Jest version 23.6.0
:
Ajouter cette ligne à jest.config.js
moduleDirectories: ["node_modules", "src"],
ou en package.json
"jest": {
"moduleDirectories": ["node_modules", "src"],
...
}
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.