it-roy-ru.com

Как исправить ошибку Jest обнаружил следующие 3 открытых дескриптора, которые могут помешать выходу Jest

Просто начинаю работать над каким-нибудь нодовым приложением, используя jest для тестирования. express-generator используется для строительных лесов.
При первом тестировании я получаю следующую ошибку: 

Jest обнаружил следующие 3 открытых дескриптора, которые могут помешать выходу Jest

Действия по воспроизведению: 

git clone [email protected]:gandra/node-jest-err-demo.git   
cd node-jest-err-demo       
npm install   
cp .env.example .env    
npm run test  

npx envinfo --preset jest вывод: 

npx: installed 1 in 1.896s

  System:
    OS: macOS High Sierra 10.13.4
    CPU: x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz   Binaries:
    Node: 9.3.0 - /usr/local/bin/node
    Yarn: 1.5.1 - /usr/local/bin/yarn
    npm: 5.7.1 - /usr/local/bin/npm   npmPackages:
    jest: ^23.1.0 => 23.1.0

Есть идеи как это исправить?

Вот связанная проблема на github: https://github.com/facebook/jest/issues/6446

4
gandra404

Параметр detectOpenHandles используется для обнаружения открытых дескрипторов, его следует использовать обычно. Ошибка предупреждает об потенциально открытых дескрипторах:

Jest обнаружил следующие 4 открытых дескриптора, которые могут помешать выходу Jest

Даже если ручки будут закрыты, ошибка все равно появится.

Реальная проблема с этим приложением состоит в том, что соединение с базой данных на самом деле не закрыто:

if (process.env.NODE_ENV === 'test') {
  mongoose.connection.close(function () {
    console.log('Mongoose connection disconnected');
  });
}

По какой-то причине NODE_ENV является dev, несмотря на то, что в документации указано, что ожидается test.

Немедленное закрытие соединения с базой данных при запуске приложения может вызвать проблемы в устройствах, которые фактически используют соединение с базой данных. Как объяснено в руководстве, подключение MongoDB должно быть в конце теста. Поскольку используется соединение по умолчанию с Mongoose, оно может быть:

afterAll(() => mongoose.disconnect());
1
estus