Jest 允许您在 package.json 中指定覆盖报告者,如下所示
{
...
"jest": {
"coverageDirectory": "./coverage",
"coverageReporters": ["json", "text", ...]
}
...
}
但是,这仅将
.json
摘要输出到覆盖目录。它仅将文本版本打印到控制台。有没有办法将文本版本也输出到覆盖文件夹中的.txt
文件?
在 jest 配置中,您可以指定
file
选项,也可以指定 dir
选项,默认为当前工作目录:
"jest": {
"coverageReporters": [["text", { file: 'coverage.txt' }]]
}
这些选项在笑话文档中简要提及,详细信息在伊斯坦布尔文档此处。
json
添加到您的笑话配置中的
coverageReports
:
"coverageReporters": ["json"]
然后安装伊斯坦布尔:
npm i -D istanbul
package.json
:
"scripts": {
"test": "jest --coverage && istanbul report --include coverage/coverage-final.json text > coverage.txt",
...
}
该脚本将生成代码覆盖率报告文件
coverage-final.json
然后 istanbul 将生成重定向到的预期输出
coverage.txt
shelljs
编写了一个自定义脚本。基本上它运行测试,并将表写入带有
fs
的文件。
const shell = require("shelljs");
const path = require("path");
const fs = require("fs");
const result = shell.exec("yarn test --coverage");
fs.writeFileSync(
path.resolve(".", "coverage.txt"),
result.substring(result.indexOf("|\nFile") + 2)
);
if (result.code !== 0) {
shell.exit(1);
}
但这并不理想。最好通过 Jest 配置来完成此操作。但在我实现这个的时候,我认为这是不可能的。
如果你碰巧在笑话之上使用了 React 脚本:
将这些片段添加到 package.json 中的相应部分:
"scripts": {
"cover:report": "react-scripts test --coverage .> coverage/coverage-report.txt",
}
...
"jest": {
"collectCoverageFrom": [
"src/**/*.ts*"
],
"coverageReporters": ["text"]
}
这会在文件coverage/coverage-report.txt中生成覆盖率报告。
“.>”部分中的点告诉脚本获取与“.”匹配的所有文件(除了被忽略的文件)。模式 - 通常是全部。修改“collectCoverageFrom”字符串数组以根据需要包含文件/文件夹。
不幸的是,这个命令不会自行退出,所以当它完成后挂在那里时,你必须按 Ctrl+C 来结束它。
要在终端中运行它:
"yarn cover:report"