使用Jest进行组件测试

时间:2017-10-13 11:18:31

标签: reactjs jestjs

我想用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"
    ]
  }

1 个答案:

答案 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仅包含jestreact-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"
  ]
}