GitHub Actions中Cypress覆盖率Docker cp路径报错排查
Cypress CI覆盖率问题解决方案
1. 定位容器内覆盖率文件正确路径
Error: No such container:path: cypress_test:/cypress-coverage报错原因是指定的容器内路径不存在,按以下步骤定位真实路径:
- 执行
docker exec cypress_test pwd获取容器默认工作目录,nyc默认生成的.nyc_output临时目录、coverage报告目录默认存放在该工作目录下,不会直接放在系统根目录。 - 执行
docker exec cypress_test find / -name ".nyc_output" -o -name "coverage" 2>/dev/null,过滤无权限的报错信息后,可直接列出容器内所有覆盖率相关目录的绝对路径。 - 若使用Cypress官方Docker镜像,默认工作目录通常为
/e2e或/cypress,可优先检查这两个路径下的文件。 - 核对
npx nyc report、yarn e2e:coverage命令的执行目录,若命令在项目子目录下运行,报告将生成在对应子目录的coverage文件夹内。
2. 配置GitHub Actions日志直接输出覆盖率统计结果
你已配置--reporter=text-summary参数,只要将报告文本内容输出到步骤标准输出流,即可被CI日志自动捕获,参考以下配置:
- 直接在容器内执行报告生成命令,不做输出重定向,文本摘要会直接打印到当前步骤日志:
- name: Run E2E test and output coverage if: ${{ always() }} run: | # 原有启动容器、执行Cypress测试的逻辑 # 测试完成后直接在容器内执行覆盖率输出命令 docker exec cypress_test sh -c "yarn e2e:coverage"
yarn e2e:coverage中包含的npx nyc report --reporter=lcov --reporter=text-summary命令执行时,text-summary类型的报告会默认输出到stdout,无需额外拷贝文件即可在日志中查看。
- 若需要先将报告文件拷贝到宿主机再打印,可在拷贝完成后增加读取摘要文件的步骤:
- name: Print coverage summary if: ${{ always() }} run: | # 替换为你实际拷贝到宿主机的覆盖率摘要文件路径 cat ./cypress-coverage/coverage-summary.txt
- 原有归档逻辑无需调整,找到容器内真实的
coverage目录路径后,修改docker cp命令的源路径即可正常归档。
内容的提问来源于stack exchange,提问作者Ali Unsal Albaz
相关产品推荐
相关产品推荐

