npm test -- --coverage 永不退出

IT技术 node.js reactjs unit-testing continuous-integration frontend
2021-05-08 11:50:52

我正在使用create-react-app创建一个react应用程序。当我执行npm test -- --coverage 时,测试永远不存在。npm test 实际上运行react-scripts test任何的想法?

在此处输入图片说明

4个回答

-- --coverage部分将不起作用,应使用以下命令之一设置CItrue.

默认情况下,npm test 使用交互式 CLI 运行观察器。但是,您可以通过设置一个名为 CI 的环境变量来强制它运行一次测试并完成该过程。

来源:React 文档

Windows (cmd.exe)

  • set CI=true && npm test

  • set CI=true && npm run build

Windows (Powershell)

  • ($env:CI = "true") -and (npm test)

  • ($env:CI = "true") -and (npm run build)

Linux、macOS (Bash)

  • CI=true npm test

  • CI=true npm run build


未包含在文档中

对于 Docker(节点和react):

docker run -e CI=true [myImage] npm run test

覆盖在观看模式下不适用于 Jest。

因为“react-scripts test --env=jsdom”默认在监视模式下工作,所以在生成覆盖输出时必须关闭监视模式。

以下来自 package.json 的摘录包含一行“coverage”,用于说明如何在由 create-react-app 引导的应用程序中实现代码覆盖率。

这只是修改后的“测试”脚本,其中组合添加了选项--watchAll=false--coverage

 "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "coverage": "react-scripts test --env=jsdom --watchAll=false --coverage",
    "eject": "react-scripts eject"
  }

请注意,使用独立的双破折号--已过时

大多数情况下,此问题可能由于以下原因而发生。

  1. 没有提到文件中所需的npm-script参数 package.json如果你create-react-app用来创建你的 React 应用程序,那么它不会接受任何命令行参数。要解决此问题,请 scriptpackage.json.

    "test": "react-scripts test --coverage --watchAll", //mark --watchAll=false if you want.
    
  2. 没有提到文件中所需的jest配置参数您应该提及需要包含在 jest 配置下的测试覆盖率中的文件。在您的 .package.jsonjest.config.jspackage.json

包.json

  "jest": {
    "collectCoverageFrom": [
      "src/**/*.js",
      "!src/index.js", // files you need to avoid in test coverage
      "!src/hooks/*.js",
      "!src/context/*.js"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 90,
        "functions": 90,
        "lines": 90,
        "statements": 90
      }
    },
    "coverageReporters": [
      "html",
      "text"
    ]
  },

我尝试了上面的所有解决方案,对我来说它仍然挂着消息:Ran all test suites.

但是这个小技巧有帮助:

    "test:ci": "cross-env CI=true react-scripts test --forceExit --detectOpenHandles",

说明:问题来自 Jest 无法关闭所有进程。以上是一个快速的解决方法。理想情况下,您应该跟踪阻止 Jest 退出的进程。