You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Github Actions中通过NX仅运行受影响的单元测试?

解决Github PR中NX affected未仅运行变更代码单元测试的问题

我在Github托管的NX工作区(包含多个Angular库和应用)中配置了PR触发的Workflow,原本每次执行所有单元测试耗时约6分钟。尝试用nx affected --target=test仅运行变更代码对应的测试,但两种配置都没生效:

  • --base=remotes/origin/${{ github.event.pull_request.base.ref }} --head=HEAD:运行成功,但仍执行所有测试
  • --base=${{ github.event.pull_request.base.sha }} --head=${{ github.event.pull_request.head.sha }}:SHA值正确获取,但依旧跑全量测试,耗时仍达7分钟

以下是排查和解决步骤:

1. 确保完整拉取仓库历史

Github Actions默认的actions/checkout只会拉取最新commit(fetch-depth:1),这会导致NX无法正确计算分支间的文件差异。需要修改checkout步骤:

- name: Checkout code
  uses: actions/checkout@v4
  with:
    fetch-depth: 0 # 拉取完整仓库历史
    ref: ${{ github.event.pull_request.head.sha }}

2. 验证affected计算结果

在Workflow中添加调试步骤,查看NX识别的受影响项目,确认是否符合预期:

- name: Print affected projects
  run: npx nx print-affected --target=test --base=${{ github.event.pull_request.base.sha }} --head=${{ github.event.pull_request.head.sha }}

如果输出显示所有项目都在受影响列表里,说明NX的依赖分析逻辑认为所有项目都被变更影响,需要进一步排查。

3. 排查NX依赖配置问题

若print-affected显示全量项目受影响,可能是以下原因:

  • 根目录核心配置文件变更(如nx.json、package.json、tsconfig.base.json),这类文件会影响所有项目
  • 某个被所有项目依赖的基础库发生变更
  • 项目的project.json中依赖配置错误,导致依赖链被错误关联

可以临时修改PR中的变更内容(比如只改一个独立库的文件),重新运行Workflow,查看print-affected结果是否正常。

4. 正确设置base和head参数

推荐使用PR的base SHA和head SHA,若使用分支名作为base,需确保本地已拉取该分支的最新代码:

- name: Fetch base branch
  run: git fetch origin ${{ github.event.pull_request.base.ref }}:refs/remotes/origin/${{ github.event.pull_request.base.ref }}

- name: Run affected tests
  run: npx nx affected --target=test --base=${{ github.event.pull_request.base.sha }} --head=${{ github.event.pull_request.head.sha }} --parallel

5. 检查缓存配置

如果看到[remote cache]但测试仍在执行,可临时禁用缓存验证问题:

- name: Run affected tests without cache
  run: npx nx affected --target=test --base=${{ github.event.pull_request.base.sha }} --head=${{ github.event.pull_request.head.sha }} --no-cache

若此时仅运行变更项目的测试,说明缓存配置需要调整;如果还是跑全量,问题仍出在affected的计算逻辑上。

内容的提问来源于stack exchange,提问作者Pieterjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:38:11