2017-10-13 4 views
0

Je veux tester mes composants à l'aide plaisanterie, mais quand je le lance, je reçois `Vous ne trouvez pas le module « réagir-routeur/routeur » de « » Router.jsReact test des composants avec Jest

at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:191:17) 
    at Object.<anonymous> (node_modules/react-router-dom/Router.js:5:15)` 

Si je démarre le serveur de développement, mon application fonctionne correctement.

Ma config plaisanterie dans package.json ressemble:

"jest": { 
    "testPathIgnorePatterns": [ 
     "/node_modules/" 
    ], 
    "moduleDirectories": [ 
     "<rootDir>/node_modules", 
     "<rootDir>/src" 
    ] 
    } 

Répondre

2

Vous écrasez moduleDirectories et vous ne pas inclure la valeur par défaut, qui est ["node_modules"]. Vous incluez plutôt <rootDir>/node_modules, ce qui n'est pas la même chose, car cela ne fera que regarder dans le node_modules à la racine de votre projet, alors que "node_modules" suit la résolution du module de Node.js. Le comportement de Node.js est de rechercher node_modules dans le répertoire en cours, si le module n'est pas trouvé, il regarde dans son répertoire parent (../node_modules) et ainsi de suite jusqu'à ce que le module soit trouvé ou que la racine de votre système de fichiers soit atteinte. Pour plus de détails, voir Loading from node_modules Folders. La différence importante est que les modules imbriqués se brisent si vous changez le comportement par défaut. Dans votre cas react-router-dom utilise react-router as a dependency et le node_modules pourrait ressembler à ceci:

node_modules 
├─ jest 
└─ react-router-dom 
    └─ node_modules 
     └─ react-router 

Dans cet exemple, node_modules dans le répertoire racine ne contient que jest et react-router-dom, donc il ne trouverait pas react-router.

Note: NPM a commencé avec la version de levage dépendances 3 et le résultat ressemblerait à ceci:

node_modules 
├─ jest 
├─ react-router-dom 
└─ react-router 

Voir aussi npm v3 Dependency Resolution.

Si vous utilisez en effet une version npm gravement obsolète, vous devez mettre à niveau immédiatement. Mais vous ne devriez jamais compter sur ce comportement et toujours inclure la résolution de module par défaut.

"jest": { 
    "testPathIgnorePatterns": [ 
    "/node_modules/" 
    ], 
    "moduleDirectories": [ 
    "node_modules", 
    "<rootDir>/src" 
    ] 
}