跨仓库调用Github Action可复用工作流时提示“未找到测试”排查
提示“no tests found”的核心原因大概率是测试文件未被正确检出到测试脚本可访问的路径,或者作业环境未获取到前端构建产物导致测试无目标,具体来看你的配置存在以下几个可能的问题:
1. 未指定e2e仓库的检出路径,导致目录冲突或测试文件位置不符
你在可复用工作流的checkout步骤中指定了repository: org/e2e-repo,但未设置path参数。默认情况下,actions/checkout会将指定仓库的代码检出到当前工作目录,这会覆盖调用者(前端仓库)的原有内容,或者如果e2e测试脚本预期测试文件在特定子目录下,就会出现找不到测试文件的情况。
解决方法:给checkout步骤添加path参数,将e2e测试代码检出到独立目录,后续测试命令切换到该目录执行:
steps: - name: Checkout e2e tests uses: actions/checkout@v4 # 建议升级到最新版本,兼容性更好 with: token: ${{ secrets.GH_PAT || github.token}} repository: org/e2e-repo ref: master path: e2e-tests # 指定检出到e2e-tests子目录 - name: Run e2e tests run: | cd e2e-tests # 切换到e2e测试代码目录 # 执行你的测试命令,比如 npm install && npm run test
2. 可复用工作流作业未获取到前端构建产物
你的e2e_tests作业依赖publish_frontend作业,但GitHub Actions中每个作业都是独立的运行器实例,前序作业的工作空间不会自动传递给后续作业。如果e2e测试需要依赖前端构建后的产物(比如静态文件、部署后的预览地址),当前配置下e2e_tests作业无法获取到这些内容,可能导致测试因找不到目标资源而误报“no tests found”(部分测试框架会在无测试目标时抛出类似提示)。
解决方法:
- 如果需要前端构建产物:在
publish_frontend作业中使用actions/upload-artifact上传构建产物,然后在e2e_tests作业中用actions/download-artifact下载到工作目录,确保e2e测试能访问到。
示例(publish_frontend作业添加上传步骤):
可复用工作流中添加下载步骤:publish_frontend: # 你的前端构建步骤... steps: # ...构建步骤 - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: frontend-build path: dist/ # 替换成你的前端构建产物目录steps: - name: Download frontend build artifact uses: actions/download-artifact@v4 with: name: frontend-build path: dist/ # 下载到对应目录,和e2e测试预期的路径一致 # 然后检出e2e测试代码、执行测试... - 如果测试依赖前端部署后的地址:确保
publish_frontend作业输出部署地址,在e2e_tests作业中通过needs.publish_frontend.outputs.xxx获取并传递给测试脚本。
3. 测试命令未正确指向测试文件
如果你的e2e测试脚本默认查找当前目录下的测试文件,但你检出e2e代码后未切换到对应目录执行命令,就会出现找不到测试文件的情况。比如你直接在工作根目录执行npm run test,但测试文件在e2e-tests子目录里,自然会提示“no tests found”。
解决方法:执行测试命令前先切换到e2e代码目录,或者在测试命令中指定测试文件路径,比如:
run: npm run test -- --testPathPattern=e2e-tests/**/*.spec.js
内容的提问来源于stack exchange,提问作者user12067722

