npm test -- --coverage 永不退出
-- --coverage
部分将不起作用,应使用以下命令之一设置CI
为true
.
默认情况下,npm test 使用交互式 CLI 运行观察器。但是,您可以通过设置一个名为 CI 的环境变量来强制它运行一次测试并完成该过程。
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"
}
请注意,使用独立的双破折号--已过时。
大多数情况下,此问题可能由于以下原因而发生。
没有提到文件中所需的
npm-script
参数package.json
。如果你create-react-app
用来创建你的 React 应用程序,那么它不会接受任何命令行参数。要解决此问题,请script
在package.json
."test": "react-scripts test --coverage --watchAll", //mark --watchAll=false if you want.
没有提到或文件中所需的
jest
配置参数。您应该提及需要包含在 jest 配置下的测试覆盖率中的文件。在您的 .package.json
jest.config.js
package.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 退出的进程。