25

我正在尝试运行Jest React 教程中的 React 示例,但我收到错误

λ npm test                                          

> ...                           
> jest                                              

Found 1 matching tests...                           
 FAIL  __tests__\CheckboxWithLabel-test.js (0.551s) 
npm ERR! Test failed.  See above for more details.  
npm ERR! not ok code 0   

我几乎直接从示例中复制了代码。package.json 如下:

{
  "dependencies": {
    "react": "*",
    "react-tools": "*"
  },
  "scripts":{
    "test": "jest"
  },
  "jest": {
    "scriptPreprocessor": "<rootDir>/preprocessor.js",
    "unmockedModulePathPatterns": [
      "<rootDir>/node_modules/react"
    ]
  },
  "devDependencies": {
    "jest-cli": "~0.1.17"
  }
}

关于我可以做些什么来解决这些错误并成功运行示例测试有什么想法吗?我很可能错过了一个重要的细节(或细节),但不完全确定是什么。哦,对于它的价值,如果这会影响这一点,我会在 Windows 上运行它。我真的很想对我的反应组件进行一些测试(那里也遇到了一些问题,所以从基本示例开始)——任何帮助将不胜感激:)

4

3 回答 3

27

我在他们的 github 页面上创建了一个问题。等待找出它是否实际上是与 Windows 相关的问题

与此同时,最终只通过指定模块的名称而不是相对路径来让它工作

"unmockedModulePathPatterns": ["react"]
于 2014-07-31T09:33:13.477 回答
5

对于任何最终在这里进行搜索的人来说,@ron 的 github 问题最终得到了解决,结论是 unmockedModulePathPatterns 需要一组匹配文件路径的正则表达式语句,而不一定是文件路径本身。这就是使用“相对”路径有效的原因。来自 Jest API 文档:

在模块加载器将自动为它们返回一个模拟之前,与所有模块匹配的正则表达式模式字符串数组。如果模块的路径与此列表中的任何模式匹配,则模块加载器不会自动模拟它。

这对于一些常用的“实用程序”模块很有用,这些模块几乎总是几乎一直用作实现细节(如下划线/低破折号等)。通常最好的做法是让这个列表尽可能的小,并且在单独的测试中总是使用显式的 jest.mock()/jest.dontMock() 调用。显式的每个测试设置对于测试的其他读者来说更容易推断测试将在其中运行的环境。

可以通过在测试文件顶部显式调用 jest.mock() 在单个测试中覆盖此设置。

https://facebook.github.io/jest/docs/api.html#config-unmockedmodulepathpatterns-array-string

从问题本身来看:

Jest 在内部使用 unmockedModulePathPatterns 创建一个正则表达式,所有需要的模块都将根据该正则表达式进行测试。因此,您需要提供有效的正则表达式模式。例如,这对我很有效:

> unmockedModulePathPatterns: [
>       "node_modules\\" + path.sep + "react",
>       "node_modules\\" + path.sep + "reflux",
>       "node_modules\\" + path.sep + "react-router"
>     ],
于 2015-05-04T19:33:28.280 回答
3

<rootDir>应替换为实际路径。看起来您没有要开始的子目录,而在某些情况下,您可能只想在src/路径中运行测试,因此您的 package.json 看起来更像这样:

{
  ...
  "jest": {
    "rootDir": "src",
    "scriptPreprocessor": "../jest/preprocessor.js" // Note: relative to src
  }
  ...
}
于 2014-07-28T19:24:23.217 回答