npm测试---coverage永不退出

时间:2019-05-05 11:54:46

标签: node.js reactjs unit-testing continuous-integration frontend

我正在使用 create-react-app 创建一个React应用程序。当我执行 npm测试---coverage 时,该测试就不存在了。 npm test实际上运行 react-scripts测试。有想法吗?

enter image description here

4 个答案:

答案 0 :(得分:1)

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

  1. 在文档中未提及必需的npm-script自变量 package.json个文件。如果您使用create-react-app创建您的 反应应用程序,那么它将不接受任何命令行 论点。要解决此问题,请在 script中的package.json标签。

    "test": "react-scripts test --coverage --watchAll", //mark --watchAll=false if you want.
    
  2. 在此未提及必需的jest配置参数 package.jsonjest.config.js文件。你应该提到文件 这需要包括在您的测试范围内 配置。在您的计算机中添加以下配置 package.json

package.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"
    ]
  },

答案 1 :(得分:0)

在观看模式下,Jest无法使用覆盖范围。

由于默认情况下,“ react-scripts test --env = jsdom”在监视模式下起作用,因此在生成coverage输出时必须关闭监视模式。

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"
  }

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

答案 2 :(得分:0)

source: React docs

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(节点和反应):

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

答案 3 :(得分:0)

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

但是这个小技巧帮助了

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

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