堆栈:
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
我们最近将所有API的测试从Mocha切换到了Jest。 我们有大约90个测试,其中一半需要同步运行,因为他们使用我们的测试数据库(在它们之间运行种子),所以我们必须使用--runInBand。
我很遗憾无法共享我的代码,因为它是私有的。
逐个运行测试很好,然后我尝试立即运行所有这些并且事情变得糟糕。 使用--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以避免内存问题和拼接覆盖报告,但这并不理想。