Почему память в одном и том же коде течёт в тестах, но не течет без них? (Nodejs, Jest)
При запуске следующего кода напрямую и через jest я получаю совершенно разные результаты. Почему так происходит и как эту проблему можно решить?
function checkMemory(string) {
global?.gc();
var used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(string + ' ' + Math.round(used * 100) / 100 + " MB");
}
function memoryLeak(cb) {
checkMemory('Начальное измерение');
(() => {
let string = 'wefwef';
for (let i = 0; i < 3000000; i++) {
string += 'wefwef';
}
checkMemory('Промежуточное измерение');
setTimeout(() => {
string += 'Утечка памяти';
}, 1000)
})();
setTimeout(() => {
checkMemory('Финальное измерение');
cb();
}, 3000);
}
if (process.env.NODE_ENV === 'test') {
it('Проверяем код на предмет утечки памяти', function (cb) {
memoryLeak(cb);
});
} else {
memoryLeak(() => {
process.exit();
});
}
Версии jest и node js:
jest == 25.5.4
node == 14.17.3
Ответы (1 шт):
Автор решения: 6y6eH4uk
→ Ссылка
Судя по всему, это проблема jest версии 25.5.4. В последней версии такой проблемы уже нет.