Jest React示例

Rya*_*aux 25 testing unit-testing reactjs jestjs

我试图从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   
Run Code Online (Sandbox Code Playgroud)

我几乎直接从示例中复制了代码.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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Ron*_*Ron 27

我在他们的github页面上创建了一个问题.等待发现它是否真的与Windows相关的问题

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

"unmockedModulePathPatterns": ["react"]
Run Code Online (Sandbox Code Playgroud)


Max*_*rty 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创建一个RegExp,测试所有必需的模块.因此,您需要提供有效的正则表达式模式.例如,这对我很有用:

> unmockedModulePathPatterns: [
>       "node_modules\\" + path.sep + "react",
>       "node_modules\\" + path.sep + "reflux",
>       "node_modules\\" + path.sep + "react-router"
>     ],
Run Code Online (Sandbox Code Playgroud)