Quais são os passos a seguir para vazamento de memória de depuração no Jest?

votos
1

Meus testes em Jest parecem estar vazando:

digite digite

Quais são os passos recommanded para depurar esse tipo de problema?

Eu sou novo para esse tipo de problema. Como você pode ver, eu tentei passando as opções documentadas no Jest (--forceExit --detectOpenHandles --runInBand --logHeapUsage), mas que não resolve o meu problema.

Publicado 19/12/2018 em 14:17
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Corri para o que eu precisava para depurar alguns testes vazamento de memória e descobriu que tomar um Heapdump do processo de execução dos testes foi mais complicado do que o esperado. Se você adicionar a --inspectbandeira do comando cli ele só irá inspecionar o jestprocesso.

A fim de anexar um depurador ao seu executor de teste entrar node_modules/jest_worker/build/worker.jse adicionar a --inspectbandeira para o trabalhador. Jest geralmente tira a --inspectbandeira.

Utilize este código:

_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,
    ),
  );
  ...
}

Finalmente executar os testes como este: node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsage Se você não tiver ejetado o seu react-scriptsvocê pode ter que fazer isso em primeiro lugar, a mudança pode ser revertido depois que você fez a depuração. --runInBandÉ importante então você vai ter muitos trabalhadores, brincadeira cria um menor trabalhador do que você tem núcleos em seu computador, por isso vai ser difícil para inspecionar / trabalhar com eles.

Não adicione o --inspectsinalizador para o node --expose-gc scripts/test.js --env=jsdom --runInBand --logHeapUsagecomando, desde então, o processo de brincadeira levará a porta depurador padrão.

Após esta etapa, você executar os testes e aberta Google Chrome, navegue até chrome://inspect/o seu processo será exibido na lista de Remote Targetsea partir daí você pode fazer perfil de memória e tomar os despejos de pilha do seu processo de teste.

Respondeu 05/04/2019 em 07:33
fonte usuário

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