Was sind die Schritte, um Debug-Speicherleck in Jest zu folgen?

stimmen
1

Meine Tests in Jest scheinen undicht zu werden:

Geben Geben

Was sind die unverbindlichen Schritte, diese Art von Problem zu debuggen?

Ich bin neu in diese Art von Problem. Wie Sie sehen können, habe ich versucht , nebenbei die Optionen in Jest dokumentiert (--forceExit --detectOpenHandles --runInBand --logHeapUsage), aber das ist mein Problem nicht lösen.

Veröffentlicht am 19/12/2018 um 14:17
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Ich lief in die ich brauchte , um einige Tests zu debuggen undichten Speichern und festgestellt , dass eine heapdump des Prozesses nimmt die Tests laufen war schwieriger als erwartet. Wenn Sie das Add - --inspectFlag den CLI - Befehl wird nur die Inspektion jestProzess.

Um einen Debugger an Ihren Test executer zu befestigen gehen in node_modules/jest_worker/build/worker.jsund fügen Sie --inspectFlagge für den Arbeiter. Jest Regel der Streifen --inspectFlagge.

Verwenden Sie diesen 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,
    ),
  );
  ...
}

Schließlich Ihre Tests wie folgt ausführen: node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsage Wenn Sie Ihre nicht ausgeworfen haben react-scriptskönnen Sie zu tun haben , dass zuerst, kann die Änderung rückgängig gemacht werden , nachdem Sie das Debuggen fertig sind. --runInBandist wichtig , sonst werden Sie zu viele Arbeiter, Scherz schafft eine weniger Arbeiter als Sie Kerne in Ihrem Computer haben, so wird es schwer sein , mit ihnen zu inspizieren / Arbeit.

Sie nicht das Hinzufügen --inspectFlag an den node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsageBefehl seitdem der Scherz Prozess den Standard - Debugger - Port statt.

Nach diesem Schritt können Sie Ihre Tests und offen ausgeführt Google Chrome, navigieren Sie zu chrome://inspect/Ihrem Prozess in der Liste der erscheint Remote Targetsund von dort können Sie Speicherprofilierungs tun und Heapspeicherauszüge des Testprozesses nehmen.

Beantwortet am 05/04/2019 um 07:33
quelle vom benutzer

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