Quelles sont les étapes à suivre pour déboguer fuite de mémoire dans Jest?

voix
1

Mes tests en Jest semblent être une fuite:

entrez entrez

Quelles sont les étapes pour déboguer Conseillés ce genre de problème?

Je suis nouveau à ce genre de problème. Comme vous pouvez le voir, je l' ai essayé passer dans les options documentées dans Jest (--forceExit --detectOpenHandles --runInBand --logHeapUsage), mais cela ne résout pas mon problème.

Créé 19/12/2018 à 14:17
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je suis tombé sur ce que je avais besoin de déboguer des tests et une fuite de mémoire constaté que la prise d' un heapdump du processus en cours d' exécution des tests était plus délicat que prévu. Si vous ajoutez le --inspectdrapeau de la commande cli il n'inspecte le jestprocessus.

Pour joindre un débogueur pour aller votre executer de test dans node_modules/jest_worker/build/worker.jset ajouter le --inspectdrapeau au travailleur. Jest bande généralement le --inspectdrapeau.

Utilisez ce code:

_initialize() {
  const args = process.execArgv.filter(v => !/^--(debug|inspect)/.test(v));
  args.push('--inspect');
  const child = (_child_process || _load_child_process()).default.fork(
    require.resolve('./child'),
    // $FlowFixMe: Flow does not work well with Object.assign.
    Object.assign(
      {
        cwd: process.cwd(),
        env: Object.assign({}, process.env, {
          JEST_WORKER_ID: this._options.workerId,
        }),
        // Suppress --debug / --inspect flags while preserving others (like --harmony).
        execArgv: args,
        silent: true,
      },
      this._options.forkOptions,
    ),
  );
  ...
}

Enfin exécuter vos tests comme ceci: node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsage Si vous ne l' avez pas éjecté votre react-scriptsvous pourriez avoir à faire d' abord, le changement peut être inversée après que vous avez terminé le débogage. --runInBandest important ce que vous aurez trop de travailleurs, plaisanterie crée un travailleur moins que vous avez des noyaux dans votre ordinateur, il sera difficile d'inspecter / travailler avec eux.

Ne pas ajouter le --inspectdrapeau à la node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsagecommande depuis lors , le processus de plaisanterie prendra le port de débogage par défaut.

Après cette étape , vous exécutez vos tests et ouvert Google Chrome, accédez à chrome://inspect/votre processus apparaît dans la liste des Remote Targetset à partir de là , vous pouvez faire du profilage de la mémoire et de prendre des décharges de tas de votre processus de test.

Créé 05/04/2019 à 07:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more