Aym*_*byk 6 memory-leaks jestjs
我在Jest中进行的测试似乎正在泄漏:
调试此类问题的建议步骤是什么?
我是这种问题的新手。如您所见,我尝试传递Jest中记录的选项(--forceExit --detectOpenHandles --runInBand --logHeapUsage),但这不能解决我的问题。
我遇到了我需要调试一些测试以检查内存泄漏的问题,发现对运行测试的进程进行Heapdump操作比预期的要难。如果您添加--inspect标记cli命令,它将仅检查该jest过程。
为了将调试器附加到您的测试执行器,请进入node_modules/jest_worker/build/worker.js并将--inspect标志添加到工作程序。开玩笑通常会剥夺--inspect旗帜。
使用此代码:
_initialize() {
const args = process.execArgv.filter(v => !/^--(debug|inspect)/.test(v));
args.push('--inspect');
const child = (_child_process || _load_child_process()).default.fork(
require.resolve('./child'),
// $FlowFixMe: Flow does not work well with Object.assign.
Object.assign(
{
cwd: process.cwd(),
env: Object.assign({}, process.env, {
JEST_WORKER_ID: this._options.workerId,
}),
// Suppress --debug / --inspect flags while preserving others (like --harmony).
execArgv: args,
silent: true,
},
this._options.forkOptions,
),
);
...
}
Run Code Online (Sandbox Code Playgroud)
最后,像这样运行测试:
node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsage
如果您还没有弹出react-scripts,则可能必须先执行该操作,然后在完成调试后可以还原更改。--runInBand非常重要,否则您将获得过多的工作人员,开玩笑会比计算机中拥有的内核减少一个工作人员,因此将很难检查/使用它们。
不要将--inspect标志添加到node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsage命令中,因为这样开玩笑的进程将使用默认的调试器端口。
完成此步骤后,您将运行测试并打开Google Chrome,导航到chrome://inspect/您的进程将出现在的列表中,Remote Targets然后您可以进行内存分析并进行测试过程的堆转储。
| 归档时间: |
|
| 查看次数: |
1208 次 |
| 最近记录: |