内存泄漏与jest(node,koa,sequelize)

时间:2018-06-05 09:29:21

标签: node.js sequelize.js jest koa

堆栈: System: OS: macOS High Sierra 10.13.4 CPU: x64 Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz Binaries: Node: 8.1.4 - ~/.nvm/versions/node/v8.1.4/bin/node npm: 6.0.0 - ~/.nvm/versions/node/v8.1.4/bin/npm npmPackages: jest: ^23.0.1 => 23.0.1 sequelize: ^4.37.10 pg: ^7.4.3 koa: ^2.3.0 babel-jest: ^22.4.3

1。前言

我们最近将所有API的测试从Mocha切换到了Jest。 我们有大约90个测试,其中一半需要同步运行,因为他们使用我们的测试数据库(在它们之间运行种子),所以我们必须使用--runInBand。

我很遗憾无法共享我的代码,因为它是私有的。

2。问题

逐个运行测试很好,然后我尝试立即运行所有这些并且事情变得糟糕。 使用--logHeapUsage,似乎上下文内存不是GC,导致Javascript堆内存不足。

我尝试使用新选项--detectOpenHandles来查看可能阻止GC运行的内容但是这就是出现的结果: ● PROMISE at Promise.catch (<anonymous>) at node_modules/core-js/library/modules/es6.promise.js:244:30 at Object.<anonymous>.module.exports (node_modules/core-js/library/modules/_iter-detect.js:19:5) at Object.<anonymous> (node_modules/core-js/library/modules/es6.promise.js:243:74) at Object.<anonymous> (node_modules/core-js/library/fn/promise.js:4:1) 我有大约6-8个,并且不知道在哪里看。

我四处搜索,发现很可能是数据库连接,所以我将这些添加为全局拆解:

afterAll(async () => {
    await db.close(); // Sequelize instance
    server.close(); // Koa server instance used with supertest (when needed)
});

这没有太大变化,内存仍然很快上升(每次测试30-40 MB)。 最后,我写了一个小文件多次启动jest以避免内存问题和拼接覆盖报告,但这并不理想。

0 个答案:

没有答案