上下文:我有大约 100 个测试套件,总共有大约 600 个测试(包含异步测试和同步测试)。我正在使用 yarn test --coverage
运行测试并生成覆盖率报告,并且在本地执行此命令时,所有测试都按预期通过(并创建了覆盖率报告)。
但是,我试图在 Github Action 中生成测试覆盖率报告,以便将覆盖率报告上传到代码覆盖率工具进行分析。为此,我在 Github Action 中运行 yarn test --coverage
。在 Github Action 中执行此命令时,它 100% 的时间都失败了(2-3 次特定测试总是失败的原因)。作为参考,这是我的 Github Action:
name: Example Action
on:
pull_request:
types: [opened, reopened, synchronize]
push:
branches:
- main
jobs:
nodejs:
name: Example Action
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set Node Version
uses: actions/setup-node@v2
with:
node-version: 12
- name: yarn install
run: yarn install
- name: yarn coverage
run: yarn test --coverage
我调查了为什么会发生这种情况,并意识到这可能是由于运行 Github Action 的机器上可用的“资源不足”。换句话说,由于运行 Github Action 的容器可以使用的内核较少,因此 Jest 似乎只允许生成 1 个工作线程(而不是在本地生成许多线程来运行测试)。为了测试这是否可能是问题所在,我在本地运行了 yarn test --coverage --maxWorkers=1
,正如我预期的那样,在 Github Action 上失败的相同测试现在在本地失败了(但是现在只有 1-2 个测试失败了原始2-3 次测试,具体取决于运行情况)。
我的问题是,为什么 Jest 使用的线程数会影响测试的通过/失败?此外,是否有人对调查/解决此问题的任何方法有任何指导?