【问题标题】:Yarn test hangs when one more tests file is added再添加一个测试文件时,纱线测试挂起
【发布时间】:2019-07-19 08:11:59
【问题描述】:

我正在运行一个包含多个测试套件 (Jest) 的项目,所有测试套件都在本地通过。 我的 CircleCI 工作中有一个步骤只是运行 yarn test

问题是整个构建在yarn test 步骤期间挂起。测试全部通过,但步骤只是挂起,并在 10 分钟后超时。

为了让事情更有趣,如果我从我的测试文件夹中删除一个测试套件文件,则该步骤将通过。我可以删除任何测试文件,它仍然会通过。这让我相信我的测试没有任何问题。此外,如果我删除一个文件,并添加一个仅包含一个虚拟测试的新文件,该步骤将再次挂起。

我忽略了什么?

谢谢!

【问题讨论】:

  • 修复是在 jest 命令中添加 -w=2,将 Jest 使用的工作人员数量限制为 2。
  • 这种方法对我没有帮助。仍然卡住了测试...

标签: jestjs circleci


【解决方案1】:

问题

我无法找到正确的解决方案,而且似乎没有人找到。当测试按顺序运行(或单独运行)并且测试失败时,Jest 可以显示可读的错误消息。

当您以并行模式(默认模式)运行 Jest 时会出现问题。这就是添加 -w=2 有帮助的原因,因为它将“并行度”降低到只有 2。

可能 Jest 有一个错误,即当测试以并行模式运行时,它无法检测到失败的测试。所以解决方案是始终使用强制顺序的配置。

解决方案

您基本上有以下选择:

npx jest --maxWorkers=1 # run tests serially

npx jest --runInBand # equivalent of the above

npx jest --detectOpenHandles # equivalent of the above, plus some additional checks

性能

它会稍微降低测试速度,但在大多数情况下,差异不会很大。就我而言,差异在几秒钟内,看:

--detectOpenHandles一起运行:

Test Suites: 26 passed, 26 total
Tests:       145 passed, 145 total
Snapshots:   0 total
Time:        24.093 s

在没有--detectOpenHandles 的情况下运行:

Test Suites: 26 passed, 26 total
Tests:       145 passed, 145 total
Snapshots:   0 total
Time:        23.602 s

另外,我发现this article,其中那个家伙还说他没有注意到巨大的性能问题,即使进行了 600 多次测试。

【讨论】:

    【解决方案2】:

    在我的情况下,我不得不使用早期版本的circleci/node 图像,因为无论启用多少工作人员都会失败。 yarnjest https://github.com/facebook/jest/issues/5989.
    有效的图片:circleci/node@sha256:6a10e853547cd5b7480ca27eac13f58505493cb375652dd432084fa07903fa7d

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 2018-05-27
      • 2022-12-08
      • 2019-01-24
      • 1970-01-01
      • 2014-04-15
      • 2013-04-12
      • 1970-01-01
      相关资源
      最近更新 更多