Jest 测试在 Github Action 上失败但在本地通过

时间:2021-05-14 17:22:56

标签: javascript testing jestjs code-coverage github-actions

上下文:我有大约 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 使用的线程数会影响测试的通过/失败?此外,是否有人对调查/解决此问题的任何方法有任何指导?

0 个答案:

没有答案