Golang 的 Codeclimate 测试覆盖格式化程序
Codeclimate test coverage formatter for Golang
Codeclimate docs 中没有任何地方写过如何指定覆盖格式化程序。但是当我试图将报道发送到 Codeclimate 时:
./cc-test-reporter before-build
./cc-test-reporter after-build
失败:
Error: could not find any viable formatter. available formatters: simplecov, lcov, coverage.py, clover, gocov, gcov, cobertura, jacoco
我已经安装了 gocov
。我还生成了一份报告 goconv
:
gocov test -coverprofile=out
并且我尝试通过各种方式将报告文件指定给Codeclimate:
./cc-test-reporter after-build out
./cc-test-reporter after-build < out
但是运气不好...
我还没有找到 .codeclimate.yml
文件的任何格式化程序相关指令。该文档以 super "you know" 风格编写,因此没有帮助。如何 enable/send 使用 Codeclimate 测试覆盖率?
导出位置:
CC_TEST_REPORTER_ID=...
运行:
for pkg in $(go list ./... | grep -v vendor); do
go test -coverprofile=$(echo $pkg | tr / -).cover $pkg
done
echo "mode: set" > c.out
grep -h -v "^mode:" ./*.cover >> c.out
rm -f *.cover
./cc-test-reporter after-build
此处来自 Code Climate Support 的 Abby。目前,test-reporter
试图从一组默认路径推断覆盖数据的位置。对于遵循覆盖工具默认设置的用户来说,这通常就足够了。
但是,如果输出不在这些路径之一上,您可以使用 test-reporter
低级命令来指示
覆盖率数据的类型及其位置。在这种特殊情况下,你会做类似的事情:
export CC_TEST_REPORTER_ID=<repo-test-reporter-id>
./cc-test-reporter before-build
gocov test -coverprofile=out
./cc-test-reporter format-coverage --input-type gocov out
./cc-test-reporter upload-coverage
您可以通过标志 --help
查看更多关于如何使用 test-reporter
命令的信息。例如,./cc-test-reporter format-coverage --help
。
这应该让你在一个好地方。如果没有,请通过 hello@codeclimate.com 或此处告诉我们,我可以获得更多见解。 :)
对于那些仍然有这个问题的人:
对我来说-问题是我错误地将输出覆盖文件命名为“cp.out”而不是cc-test-reporter
期望的“c.out”。
这是我的工作脚本:
#!/bin/sh
inputFile=
while IFS="=" read -r repo reporterID
do
cd "$HOME""/go/src/github.com/""$repo" || exit
echo "performing code coverage upload for ""$repo"
git checkout master && git pull ##don't know if main is used
cp -f "$HOME"/shellScripts/test-reporter-latest-darwin-amd64 .
chmod 755 test-reporter-latest-darwin-amd64
./test-reporter-latest-darwin-amd64 before-build
export CC_TEST_REPORTER_ID="$reporterID"
go test -coverprofile=c.out ./...
./test-reporter-latest-darwin-amd64 after-build --prefix "github.com/""$repo"
echo
echo "======================="
echo
done < "$inputFile"
Codeclimate docs 中没有任何地方写过如何指定覆盖格式化程序。但是当我试图将报道发送到 Codeclimate 时:
./cc-test-reporter before-build
./cc-test-reporter after-build
失败:
Error: could not find any viable formatter. available formatters: simplecov, lcov, coverage.py, clover, gocov, gcov, cobertura, jacoco
我已经安装了 gocov
。我还生成了一份报告 goconv
:
gocov test -coverprofile=out
并且我尝试通过各种方式将报告文件指定给Codeclimate:
./cc-test-reporter after-build out
./cc-test-reporter after-build < out
但是运气不好...
我还没有找到 .codeclimate.yml
文件的任何格式化程序相关指令。该文档以 super "you know" 风格编写,因此没有帮助。如何 enable/send 使用 Codeclimate 测试覆盖率?
导出位置:
CC_TEST_REPORTER_ID=...
运行:
for pkg in $(go list ./... | grep -v vendor); do
go test -coverprofile=$(echo $pkg | tr / -).cover $pkg
done
echo "mode: set" > c.out
grep -h -v "^mode:" ./*.cover >> c.out
rm -f *.cover
./cc-test-reporter after-build
此处来自 Code Climate Support 的 Abby。目前,test-reporter
试图从一组默认路径推断覆盖数据的位置。对于遵循覆盖工具默认设置的用户来说,这通常就足够了。
但是,如果输出不在这些路径之一上,您可以使用 test-reporter
低级命令来指示
覆盖率数据的类型及其位置。在这种特殊情况下,你会做类似的事情:
export CC_TEST_REPORTER_ID=<repo-test-reporter-id>
./cc-test-reporter before-build
gocov test -coverprofile=out
./cc-test-reporter format-coverage --input-type gocov out
./cc-test-reporter upload-coverage
您可以通过标志 --help
查看更多关于如何使用 test-reporter
命令的信息。例如,./cc-test-reporter format-coverage --help
。
这应该让你在一个好地方。如果没有,请通过 hello@codeclimate.com 或此处告诉我们,我可以获得更多见解。 :)
对于那些仍然有这个问题的人:
对我来说-问题是我错误地将输出覆盖文件命名为“cp.out”而不是cc-test-reporter
期望的“c.out”。
这是我的工作脚本:
#!/bin/sh
inputFile=
while IFS="=" read -r repo reporterID
do
cd "$HOME""/go/src/github.com/""$repo" || exit
echo "performing code coverage upload for ""$repo"
git checkout master && git pull ##don't know if main is used
cp -f "$HOME"/shellScripts/test-reporter-latest-darwin-amd64 .
chmod 755 test-reporter-latest-darwin-amd64
./test-reporter-latest-darwin-amd64 before-build
export CC_TEST_REPORTER_ID="$reporterID"
go test -coverprofile=c.out ./...
./test-reporter-latest-darwin-amd64 after-build --prefix "github.com/""$repo"
echo
echo "======================="
echo
done < "$inputFile"