reactjs - Create-React-App:无法从 package.json 脚本触发代码覆盖率报告

标签 reactjs jestjs code-coverage create-react-app babel-jest

我在从 package.json 中的脚本运行完整测试覆盖率时遇到了一些困难。我的 create-react-app . repo 链接 here ;

package.json

{
  "name": "React Kitchen Sink",
   ...
  "dependencies": {
    ...
    "react": "^16.14.0",
    "react-dom": "^16.14.0",
    "react-scripts": "^3.4.4"
  },
  "scripts": {
    "start": "react-scripts -r @cypress/instrument-cra start",
    "start:silent": "BROWSER=none yarn start",
    "start:server": "start-server-and-test start:silent http://localhost:3000",
    "build": "react-scripts build",
    "eject": "react-scripts eject",

    "jest:test": "react-scripts test --env=jest-environment-jsdom-sixteen",
    "jest:coverage": "react-scripts test --env=jest-environment-jsdom-sixteen --watchAll=false --coverage",
...
...
运行
yarn jest:test
以覆盖范围的监视模式开始测试,如果我按 a然后我得到所有测试通过的报告
但如果我这样做
yarn jest:coverage
然后所有测试失败
错误看起来像这样:
 FAIL  src/components/Photo/index.test.js
  ● Console

    console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
      Error: Uncaught [Error: Photo(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.]
          at reportException (/Users/norfeldt/Abtion/Playground/react-kitchen-sink/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:62:24)
          at innerInvokeEventListeners (/Users/norfeldt/Abtion/Playground/react-kitchen-sink/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:333:9)
          at invokeEventListeners

...

      The above error occurred in the <Photo> component:
          in Photo (at Photo/index.test.js:32)
      
      Consider adding an error boundary to your tree to customize error handling behavior.
      Visit <link> to learn more about error boundaries.

  ● has a test id

    Photo(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

...


最佳答案

这似乎是 create-react-app 中的一个已知问题版本>3.4.1,运行时出现此bug react-scripts test与旗帜 --watchAll=false--coverage同时。已在 @facebook/create-react-app#8689 中报告
后来通过更新 jest 修复了该错误。 CRA 中使用的版本到 PR 中的 >25 版本 @facebook/create-react-app#8362 .该修复程序包含在 CRA 的新主要版本 4.0.0 中。
因此,您应该升级您的 react-scripts打包到版本 >=4.0.0 然后关注 this migration guide (查看是否有任何影响您的重大更改)然后问题应该得到解决。
在你的情况下,我已经下载了你的 repo 并完成了以下操作:

  • 已删除 node_modules文件夹。
  • 升级了react-scripts通过执行此命令到 4.0.0 版 yarn add --exact react-scripts@4.0.0 (也可能是更高的 4.x 版本)。
  • 运行 yarn install再次。
  • 最后再试一次yarn test:coverage它就像一个魅力:

  • Image of jest:coverage working
    如果其他人正在阅读这篇文章并且由于某种原因升级到 4.0.0 版本不是一种选择,那么短期的简单解决方法是:
  • 移除标志 --watchAll=false并像这样运行它:react-scripts test --env=jest-environment-jsdom-sixteen --coverage
  • 或降级react-scripts到版本 3.4.0。
  • 关于reactjs - Create-React-App:无法从 package.json 脚本触发代码覆盖率报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66353093/

    相关文章:

    reactjs - 如何在带有列值的 Monday.com 中创建新的看板项目?代码不工作

    reactjs - React - 将 child 分成几部分

    javascript - 使用 array.map 返回响应三元运算符

    c# - Azure DevOps 2019 Server 无法执行具有代码覆盖率的测试

    maven - Erlang EUnit 测试的 SonarQube 代码覆盖率

    javascript - ReduxForm - enableReinitialize 不更新嵌套 FieldArrays 中的值

    debugging - 如何在 create-react-app 上调试 jest 单元测试?

    reactjs - 对于在 React Native 上使用 enzyme 的浅层测试,this.refs 未定义

    javascript - 使用 Jest 和 enzyme 登录特别 react 组件

    unit-testing - 突变测试在实践中有用吗?