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.json
或 jest.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?