使用暴露gc从CRA应用程序中的节点运行Jest



我遇到了内存泄漏的问题,这些问题来自于使用Jest运行我的测试套件,其中内存使用量随着每个套件的增加而不断增加。

在网上搜索后,我发现这可能与垃圾收集器行为有关,多个Github线程建议运行以下命令:

node --expose-gc ./node_modules/jest/bin/jest.js --coverage --runInBand --logHeapUsage

问题是我的项目使用React(CRA未弹出)和Typescript,因此每当我运行此脚本时,它都会因为Typescript而抛出Syntax error

我试过安装ts-jest库,但它不起作用。这可能是相关的,但运行ts-jest设置init会抱怨由于CRA已经有了配置。

我一直在搜索,但没有找到任何东西,因为所有相关的线程都是关于Jest已知的内存泄漏,但没有一个解释如何在使用React和Typescript的项目中使用expose-gc执行node命令。

  • 有没有什么方法可以将GC暴露给CRA使用的Jest脚本,这样我就可以一直使用与现在相同的配置
  • 否则,我如何执行node --expose-gc jest解析我的文件,这样它就不会抛出错误
  • 我还需要使用--inspect-brk来查看泄漏的来源,因此即使--detect-leaks工作,我仍然需要找到一种方法来从node命令执行Jest-config

谢谢!

在查看了Jest的文档后,我看到了本节,其中建议在调用react-scripts的VS代码中运行调试配置。在玩了一点之后,这是让它工作的命令:

node --inspect-brk node_modules/react-scripts/scripts/test.js --no-cache --env=jsdom --runInBand

正如您所看到的,您必须直接调用react-scripts中的test.js文件,然后您可以将所有想要的参数发送到Jest,就像您通常直接从项目的终端运行测试时所做的那样。

如果你执行这个脚本:

node --inspect-brk node_modules/react-scripts/bin/react-scripts.js test --no-cache --env=jsdom --runInBand

您可以附加到节点调试器,但不能在测试文件中设置debugger停止,因为它将附加到主进程,即react-scripts(而不是test脚本本身)。

希望这能在未来帮助到别人!

最新更新