npm test -- --coverage 永远不会退出

Posted

技术标签:

【中文标题】npm test -- --coverage 永远不会退出【英文标题】:npm test -- --coverage never exits 【发布时间】:2019-09-23 06:56:17 【问题描述】:

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

【问题讨论】:

您能否显示正在运行的实际命令。它应该在 package.json 的脚本对象中。如果在您拥有的命令中 - 尝试删除它。一个例子是 jest 。 --覆盖 @connormcwood 我的脚本对象是 "scripts": "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test ", "eject": "react-scripts 弹出" 有很多线程与 react-tests 未终止有关。您可以尝试以下操作:将测试的值设置为 CI=true react-scripts test --env=jsdom 而不仅仅是 react-scripts test。见github.com/facebook/create-react-app/issues/1137 "test": "CI=true react-scripts test" 解决了这个问题。谢谢 质量,正如线程所暗示的,由于某些特殊原因,您必须声明 CI=true。 【参考方案1】:

在我的情况下指定一个目录

"test:cover": "react-scripts test --coverage src"

【讨论】:

【参考方案2】:

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

但是这个小技巧有帮助:

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

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

【讨论】:

【参考方案3】:

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

    package.json 文件。如果您使用create-react-app 创建您的 反应应用程序,那么它将不接受任何命令行 论据。要解决此问题,请在 script 标记在您的package.json 中。

    "test": "react-scripts test --coverage --watchAll", //mark --watchAll=false if you want.
    

    未提及所需的 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"
    ]
  ,

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

for (React) 上述答案的来源:create-react-app.dev/docs/running-tests/#travis-ci【参考方案5】:

Coverage 不适用于观看模式下的 Jest。

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

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

只是修改后的“test”脚本,组合添加了--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"
  

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

【讨论】:

以上是关于npm test -- --coverage 永远不会退出的主要内容,如果未能解决你的问题,请参考以下文章

ATPG中test coverage和fault coverage的区别

如果 py.test 从另一个目录执行它,coverage.py 不会覆盖脚本

ng test --code-coverage 不打印覆盖率详细信息

如何排除`ng test --code-coverage`的所有*services.ts?

[Webpack 2] Add Code Coverage to tests in a Webpack project

为 grails 运行 test-app -coverage 命令时出现错误,即使所有测试用例都通过了