我正在运行一个项目,该项目具有多个测试套件(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分钟后超时。
为了使事情更有趣,如果我从测试文件夹中删除一个测试套件文件,则该步骤将通过。我可以删除任何测试文件,但仍然可以通过。那使我相信我的测试没有错。另外,如果我删除一个文件,然后仅使用一个虚拟测试添加一个新文件,则该步骤将再次挂起。
我俯瞰什么?
谢谢!
答案 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
映像,因为无论启用了多少工作程序,该映像都会失败。带有yarn
和jest
https://github.com/facebook/jest/issues/5989的东西。
有效的图片:circleci/node@sha256:6a10e853547cd5b7480ca27eac13f58505493cb375652dd432084fa07903fa7d