如何在TFS 2017中配置Chutzpah并生成代码覆盖率报告
配置TFS构建以通过Chutzpah.json生成代码覆盖率报告
刚好之前帮团队搞定过类似的问题,你遇到的核心卡点就是TFS构建流程里缺了执行Chutzpah测试并输出覆盖率报告的关键环节,下面一步步给你捋清楚配置步骤:
1. 先把本地的Chutzpah配置调对(chutzpah.json)
首先得确保你的chutzpah.json已经正确开启了覆盖率,并且指定了TFS能识别的报告格式(推荐用cobertura,TFS对它的支持最好)。给你一个参考配置:
{ "Framework": "mocha", // 换成你项目用的测试框架,比如jasmine "TestHarnessLocationMode": "SettingsFileAdjacent", "Tests": [ { "Path": "./tests" } // 你的测试文件目录 ], "CodeCoverage": { "Enabled": true, "Include": [ "../src/**/*.ts" // 要统计覆盖率的源文件路径 ], "Exclude": [ "../src/**/*.d.ts", // 排除声明文件 "../tests/**/*.ts" // 排除测试文件 ], "ReportType": "cobertura", "ReportPath": "./coverage/cobertura.xml" // 报告输出路径,记好这个后面要用 } }
这里重点注意ReportPath的路径,后续构建任务里要完全对应上。
2. 在TFS构建里加Chutzpah执行任务
你需要在TFS的构建定义里加一个命令行任务(如果TFS市场有Chutzpah的官方扩展也可以用,但命令行更通用,不会受扩展版本限制):
- 打开你的TFS构建定义,切换到「任务」标签页,点击
+号添加任务 - 搜索「命令行」并选中,然后配置这些参数:
- 工具:如果你的构建代理已经全局装了Chutzpah,直接填
chutzpah.console.exe;如果是项目本地通过npm安装的,Windows代理填node_modules/.bin/chutzpah.cmd,Linux代理填node_modules/.bin/chutzpah - 参数:指定你的
chutzpah.json路径,比如./tests/chutzpah.json,怕出问题可以加个/coverage参数强制生成覆盖率报告 - 工作目录:设置成你的项目根目录,或者
chutzpah.json所在的目录,确保路径不会乱
- 工具:如果你的构建代理已经全局装了Chutzpah,直接填
3. 添加发布覆盖率报告的任务
生成报告后,得让TFS把它展示出来,这一步要用TFS自带的发布代码覆盖率结果任务:
- 同样在任务列表里添加这个任务
- 配置参数:
- 覆盖率工具:选
Cobertura(和你chutzpah.json里的ReportType对应) - 报告文件:填你刚才在
chutzpah.json里写的ReportPath,最好用TFS的变量来定位,比如$(System.DefaultWorkingDirectory)/coverage/cobertura.xml,避免相对路径出问题 - 其他参数默认就行,有特殊需求再调整
- 覆盖率工具:选
4. 跑个构建验证一下
保存好构建定义后,触发一次新构建:
- 先看命令行任务的日志,确认Chutzpah成功执行了,并且生成了指定路径的
cobertura.xml文件 - 再看发布覆盖率任务的日志,确认报告被成功上传到TFS
- 构建完成后,去构建摘要页面就能看到代码覆盖率的统计图表和详情了
几个常见坑的排查
- 如果还是提示“报告文件未找到”:先核对
chutzpah.json里的ReportPath和发布任务里的路径是不是完全一致,TFS里尽量用绝对路径或者变量,别用相对路径踩坑 - 如果Chutzpah执行失败:先在构建代理上手动跑一遍命令,看看是不是没装Chutzpah,或者依赖包没装全
- 如果TypeScript文件覆盖率为0:检查
CodeCoverage里的Include和Exclude规则,确保你要统计的源文件被包含进去了,测试文件和声明文件被排除了
内容的提问来源于stack exchange,提问作者Mhd
相关产品推荐
相关产品推荐

