【问题标题】:npm test -- --coverage never exitsnpm test -- --coverage 永远不会退出
【发布时间】: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。

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


【解决方案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】:

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

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

      【讨论】:

        【解决方案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

        【讨论】:

        【解决方案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"
          }
        

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

        【讨论】:

          猜你喜欢
          • 2018-06-09
          • 1970-01-01
          • 2014-08-04
          • 2012-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-26
          • 1970-01-01
          相关资源
          最近更新 更多