如何将TravisCI覆盖率结果发送至Coveralls?报错排查
遇到这个500错误确实挺闹心的,毕竟服务器内部错误有时候让人摸不着头脑,不过结合你的场景,大概率是这几个原因之一,咱们一个个排查:
Coveralls服务端临时故障
500错误本身就是服务器端的问题,有时候是Coveralls那边的服务波动或者正在维护。你可以先关注下Coveralls的官方状态更新,确认是不是他们的服务出了问题,如果是这种情况,等一段时间重新触发Travis构建就好了。LCOV报告格式不兼容
直接调用jest命令可能和create-react-app封装的jest配置有冲突,导致生成的LCOV报告路径或者格式不对,Coveralls处理时出错。试试换成create-react-app官方的测试命令:react-scripts test --coverage --coverageReporters=text-lcov | coveralls这个命令会用react-scripts预设的jest配置生成报告,路径处理更适配Travis环境。另外也可以在本地先运行这个命令,把输出保存到文件(比如
jest --coverage --coverageReporters=text-lcov > coverage.lcov),看看文件内容是否完整,有没有路径错乱的情况。Coveralls令牌配置问题
虽然通常令牌错误会返回401,但偶尔也会因为令牌无效或者未正确传递导致服务器处理出错。检查TravisCI项目的环境变量里,COVERALLS_REPO_TOKEN是否和Coveralls项目页面提供的令牌完全一致,有没有多余的空格或者拼写错误。另外可以在构建日志里加个echo $COVERALLS_REPO_TOKEN(记得别泄露令牌),验证这个变量在Travis环境里是否能正常访问。依赖版本不兼容
看看package.json里的coveralls包版本是不是太老了,老版本可能和最新的LCOV格式或者Travis环境不兼容。试试更新到最新版本:npm install coveralls --save-dev同时确保Travis的构建步骤里依赖安装完整,比如不要跳过
npm install步骤,或者用npm ci代替npm install来保证依赖版本和本地一致。覆盖率报告为空或不完整
如果你的测试用例没有实际执行,或者覆盖率报告完全是空的,Coveralls在处理时可能会抛出内部错误。先在本地运行npm test --coverage看看有没有正常生成覆盖率数据,确认测试用例能正常跑通,没有全部跳过或者失败的情况。
内容的提问来源于stack exchange,提问作者v v

