Rap*_*ard 5 node.js sequelize.js koa jestjs
堆栈:\n\n System:\n OS: macOS High Sierra 10.13.4\n CPU: x64 Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz\n Binaries:\n Node: 8.1.4 - ~/.nvm/versions/node/v8.1.4/bin/node\n npm: 6.0.0 - ~/.nvm/versions/node/v8.1.4/bin/npm\n npmPackages:\n jest: ^23.0.1 => 23.0.1\n sequelize: ^4.37.10\n pg: ^7.4.3\n koa: ^2.3.0\n babel-jest: ^22.4.3\n
我们最近将所有 API 的测试从 Mocha 切换到 Jest。\n我们有大约 90 个测试,其中一半需要同步运行,因为它们使用我们的测试数据库(在它们之间运行种子),所以我们必须使用 --runInBand。
\n\n不幸的是,我无法分享我的代码,因为它是私有的。
\n\n一项一项地运行测试没问题,然后我尝试一次运行所有测试,但事情变得很糟糕。\n使用 --logHeapUsage,上下文内存似乎不会被 GC 导致 Javascript 堆内存不足。
\n\n我尝试使用新选项 --detectOpenHandles 来查看什么会阻止 GC 工作,但结果是这样的:\n \n \xe2\x97\x8f PROMISE\n at Promise.catch (<anonymous>)\n at node_modules/core-js/library/modules/es6.promise.js:244:30\n at Object.<anonymous>.module.exports (node_modules/core-js/library/modules/_iter-detect.js:19:5)\n at Object.<anonymous> (node_modules/core-js/library/modules/es6.promise.js:243:74)\n at Object.<anonymous> (node_modules/core-js/library/fn/promise.js:4:1)\n\n我有大约 6-8 个这样的选项,但不知道在哪里查找。
我四处搜索,发现它很可能是数据库连接,所以我将它们添加为全局拆卸:
\n\nafterAll(async () => {\n await db.close(); // Sequelize instance\n server.close(); // Koa server instance used with supertest (when needed)\n});\nRun Code Online (Sandbox Code Playgroud)\n\n这并没有太大变化,内存仍然增长得很快(每次测试 30-40 MB)。\n最后,我编写了一个小文件多次启动 jest 以避免内存问题并将覆盖率报告拼接在一起,但这不是理想的。
\n