添加另一个测试文件时,纱线测试挂起

时间:2019-02-25 20:46:07

标签: jestjs circleci

我正在运行一个项目,该项目具有多个测试套件(Jest),所有套件都在本地传递。 我在CircleCI工作中迈出了一步,只需运行string s = inputTextBox.Text; string[] parts = s.Split(' '); string lastword = parts[parts.Length - 1]; for (int i = 0; i < parts.Length - 1; i++) { if (parts[i] != lastword) { // do something } }

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

为了使事情更有趣,如果我从测试文件夹中删除一个测试套件文件,则该步骤将通过。我可以删除任何测试文件,但仍然可以通过。那使我相信我的测试没有错。另外,如果我删除一个文件,然后仅使用一个虚拟测试添加一个新文件,则该步骤将再次挂起。

enter image description here

我俯瞰什么?

谢谢!

2 个答案:

答案 0 :(得分: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 多次测试,他也没有注意到巨大的性能问题。

答案 1 :(得分:0)

在我的情况下,我必须使用早期版本的circleci/node映像,因为无论启用了多少工作程序,该映像都会失败。带有yarnjest https://github.com/facebook/jest/issues/5989的东西。
有效的图片:circleci/node@sha256:6a10e853547cd5b7480ca27eac13f58505493cb375652dd432084fa07903fa7d