【问题标题】:Create-React-App: Can't trigger code coverage report from package.json scriptCreate-React-App:无法从 package.json 脚本触发代码覆盖率报告
【发布时间】:2021-05-26 21:39:42
【问题描述】:

我在从我的create-react-apppackage.json 中的脚本运行完整测试覆盖时遇到了一些困难。链接到 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.

...


【问题讨论】:

  • 如果直接运行react-scripts 命令会发生什么?
  • 你的意思是没有--env=jest.. ???
  • 我的意思是不要运行yar test:coverage,而是尝试运行react-scripts test --env=jest-environment-jsdom-sixteen --watchAll=false --coverage。 (您可能必须提供react-scripts 实用程序的完整路径。)这至少有助于缩小问题范围。
  • @srk 这给了我同样失败的测试。我已经更新了我的问题以显示一些错误
  • @Norfeldt 尝试将 react-scripts 升级到版本 >=4.0.0 :)

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


【解决方案1】:

这似乎是create-react-app 版本>3.4.1 中的一个已知问题,其中在同时运行带有--watchAll=false--coverage 标志的react-scripts test 时会发生此错误。举报于@facebook/create-react-app#8689

后来通过将 CRA 中使用的 jest 版本更新为 PR @facebook/create-react-app#8362 中的 >25 版本来修复该错误。该修复程序包含在 CRA 的新主要版本 4.0.0 中。

因此,您应该将您的react-scripts 包升级到版本>=4.0.0,然后按照this migration guide(查看是否有任何影响您的重大更改)然后解决问题应该修好了。

在你的情况下,我已经下载了你的 repo 并完成了以下操作:

  1. 已删除node_modules 文件夹。
  2. 通过执行此命令 yarn add --exact react-scripts@4.0.0react-scripts 升级到版本 4.0.0(也可能是更高的 4.x 版本)。
  3. 再次运行yarn install
  4. 最后,再次尝试yarn test:coverage,效果很好:

如果其他人正在阅读本文并且由于某种原因无法升级到 4.0.0 版,那么短期内可以轻松解决以下任一问题:

  • 删除标志 --watchAll=false 并像这样运行它:react-scripts test --env=jest-environment-jsdom-sixteen --coverage
  • 或将react-scripts 降级到版本3.4.0。

【讨论】:

    【解决方案2】:

    试试这个脚本

    react-scripts test --collectCoverage
    

    【讨论】:

    • 触发手表模式,如果我按下a,那么所有测试都会失败
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2020-05-20
    • 2021-02-11
    • 2014-04-16
    相关资源
    最近更新 更多