Jest测试在本地运行正常,但在Jenkins中冻结-仅与--runInBand一起使用,如何调试?

zujrkrfu  于 2023-05-16  发布在  Jenkins
关注(0)|答案(2)|浏览(174)

我有一套Jest测试,在本地运行jest时工作正常-但是当它在Jenkins中只运行jest时,它在其中一个测试中冻结并挂起。整个测试套件在本地通常需要大约15秒。
当我运行jest --runInBand时,它确实在Jenkins上工作,以便测试按顺序运行。
调试此问题的最佳方法是什么和/或可能会发生什么?
我们最近刚刚转换到typescript和ts-jest,所以我认为这可能是罪魁祸首,但仍然想了解这个问题。

// jest.config.js

/* @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
  roots: ["./src"],
  preset: "ts-jest",
  testEnvironment: "node",
  transform: {
      "^.+\\.(ts|tsx)?$": "ts-jest",
  },
  testMatch: ["**/?(*.)+(spec|test).+(ts|tsx|js)"],
 

}
5lhxktic

5lhxktic1#

一般来说,jest将保持自身打开状态,直到所有句柄都被释放。这会导致Jenkins看起来挂起,因为jest还没有释放对终端的控制(并且由于jest用于运行测试的后台工作节点,在本地运行时往往会有不同的行为)。一般来说,运行--forceExit --detectOpenHandles会强制释放终端(从而防止jenkins挂起),并检测是否仍有打开的句柄需要在测试中修复。
查看jest hangs indefinitely, runs no tests了解更多信息。

liwlm1x9

liwlm1x92#

Jest会适应你的最大资源。不管你有多少资源。玩笑会把他们都榨干的。您可以使用--maxWorkers选项限制CPU使用。
--maxWorkers=<num>|<string>

相关问题