如何为变更的包运行单元测试?Lerna测试流水线配置问询
实现Lerna项目仅运行变更包的单元测试
嘿,这个需求完全能搞定!Lerna本身就提供了针对变更包的命令支持,搭配CI流水线就能轻松实现只跑修改项目的单元测试,我给你分享几个实用的方案:
方案一:用Lerna自带的--since参数
这是最直接的方式,--since参数可以让Lerna只针对相对于某个基准版本/分支有变更的包执行命令。
比如你想对比origin/main分支(假设这是你的主分支),只跑变更包的测试,直接执行:
lerna run test --since origin/main
这个命令会自动识别出所有在当前分支相对于main有代码变更的包,然后只在这些包上执行test脚本。
如果你的场景需要连带着依赖了变更包的其他包一起跑测试(比如包A依赖包B,B改了之后A可能也需要验证),可以加上--include-dependents参数:
lerna run test --since origin/main --include-dependents
方案二:结合CI的变更检测脚本
如果你的CI平台需要更精细化的控制,比如先确认变更包列表再逐个执行测试,可以用lerna changed命令先输出变更包的名称,再通过脚本批量执行测试:
示例脚本(bash)
# 获取变更的包列表,每行一个包名 changed_packages=$(lerna changed --json | jq -r '.[].name') # 循环执行每个包的测试 for pkg in $changed_packages; do lerna run test --scope "$pkg" done
这个脚本会先拿到所有变更的包,然后用--scope参数指定只跑对应包的测试。
CI配置示例(以GitHub Actions为例)
如果用GitHub Actions,你可以把逻辑写到 workflow 里:
jobs: test-changed-packages: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # 必须拉取完整历史才能对比分支变更 - name: Install dependencies run: npm install - name: Run tests on changed packages run: lerna run test --since origin/main
注意事项
- 确保你的CI环境拉取了完整的Git历史(比如GitHub Actions里设置
fetch-depth: 0),否则Lerna无法正确对比变更。 - 如果你的测试脚本需要额外的环境配置,要确保每个包的
package.json里的test脚本是可独立执行的。
内容的提问来源于stack exchange,提问作者jojo
相关产品推荐
相关产品推荐

