web-dev-qa-db-fra.com

Comment réparer err Jest a détecté les 3 poignées ouvertes suivantes empêchant potentiellement Jest de quitter

Je commence à peine à travailler sur une application de noeud utilisant la plaisanterie à des fins de test. express-generator utilisé pour les échafaudages.
Lors du premier test, le message d'erreur suivant s'affiche: 

Jest a détecté les 3 poignées ouvertes suivantes empêchant potentiellement Jest de quitter

Étapes à suivre pour reproduire: 

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 sortie: 

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

Toute idée de comment résoudre ce problème?

Voici un problème connexe sur github: https://github.com/facebook/jest/issues/6446

4
gandra404

L'option detectOpenHandles est utilisée pour détecter les descripteurs ouverts. Elle devrait normalement être utilisée. L'erreur met en garde sur potentiellement poignées ouvertes:

Jest a détecté les 4 poignées ouvertes suivantes empêchant potentiellement Jest de quitter

Même si les poignées seront fermées, l'erreur apparaîtra quand même.

Le problème avec cette application est que la connexion à la base de données n'est pas vraiment fermée:

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

Pour une raison quelconque, NODE_ENV est dev, malgré le fait que la documentation indique qu'il est censé être test.

La fermeture immédiate de la connexion à la base de données au démarrage de l’application peut entraîner des problèmes dans les unités qui utilisent réellement la connexion à la base de données. Comme expliqué dans le guide, la connexion MongoDB doit être à la fin du test. Puisque la connexion par défaut Mongoose est utilisée, il peut s'agir de:

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