我想用jest测试我的组件,但是当我运行它时,我得到了 `无法找到模块' react-router / Router'来自' Router.js'
at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:191:17)
at Object.<anonymous> (node_modules/react-router-dom/Router.js:5:15)`
如果我启动开发服务器,我的应用程序正在运行。
我在package.json中的jest配置如下:
"jest": {
"testPathIgnorePatterns": [
"/node_modules/"
],
"moduleDirectories": [
"<rootDir>/node_modules",
"<rootDir>/src"
]
}
答案 0 :(得分:2)
您正在覆盖moduleDirectories
,但未包含默认值["node_modules"]
。您包含<rootDir>/node_modules
而不是相同,因为它只会查看项目根目录中的node_modules
,而"node_modules"
会遵循Node.js的模块解析。 Node.js的行为是在当前目录中查找node_modules
,如果找不到模块,则查找其父目录(../node_modules
),依此类推,直到找到模块或根目录为止到达您的文件系统。有关详细信息,请参阅Loading from node_modules
Folders。
重要的区别是,如果更改默认行为,嵌套模块会中断。在您的情况下react-router-dom
使用react-router
as a dependency,而node_modules
可能如下所示:
node_modules
├─ jest
└─ react-router-dom
└─ node_modules
└─ react-router
在此示例中,根目录中的node_modules
仅包含jest
和react-router-dom
,因此找不到react-router
。
注意:npm开始使用版本3挂起依赖项,结果如下所示:
node_modules
├─ jest
├─ react-router-dom
└─ react-router
另见npm v3 Dependency Resolution。
如果您确实使用了严重过时的npm版本,则应立即升级。但是你永远不应该依赖这种行为,并且总是包含默认的模块分辨率。
"jest": {
"testPathIgnorePatterns": [
"/node_modules/"
],
"moduleDirectories": [
"node_modules",
"<rootDir>/src"
]
}