es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Probar una aplicación de nodo con `npm run test –runInBand –detectOpenHandles –forceExit` no detecta los manejadores abiertos.

Las pruebas Jest de mi aplicación de node siguen devolviendo una advertencia sobre la falta de salida elegante:

Un proceso de trabajo no ha podido salir de manera fluida y ha sido cerrado a la fuerza. Esto es probablemente causado por pruebas que pierden memoria debido a una eliminación no adecuada. Prueba a ejecutar con –runInBand –detectOpenHandles para encontrar pérdidas de memoria.

La pregunta https://stackoverflow.com/questions/69244089/jest-error-on-upgrading-to-latest-version-a-worker-process-has-failed-to-exit menciona que la documentación sugiere --forceExit.

Estoy usando VSCode en WSL1, y aquí es cómo he empezado a ejecutar mis pruebas:

user:~/ponder$ npm run test --runInBand --detectOpenHandles --forceExit
> ponder@1.0.0 test
> jest

PASS  ./entries.spec.js
 PASS  ./constraints.spec.js
 PASS  resources/csvToJson.spec.js
 PASS  resources/resources.spec.js
Un proceso de trabajo no ha podido salir de manera fluida y ha sido cerrado a la fuerza. Esto es probablemente causado por pruebas que pierden memoria debido a una eliminación no adecuada. Prueba a ejecutar con --runInBand --detectOpenHandles para encontrar pérdidas de memoria.

Resultados de las pruebas: 4 aprobados, 4 totales
Pruebas: 10 aprobadas, 10 totales
Instantáneas: 0 totales
Tiempo: 34,906 s
Se ejecutaron todas las suites de pruebas.

Pero como puedes ver, ¿todavía sigo recibiendo la advertencia?

Mi configuración de Jest es:

module.exports = {
  testEnvironment: 'node',
  maxWorkers: 4,
  testTimeout: 20000,
};

Y webpack es:

const webpack = require('webpack'); // para acceder a los plugins integrados

module.exports = {
  mode: 'development',
  plugins: [
    new webpack.IgnorePlugin(/(fs|child_process)/),
  ],
};

y en mi archivo package.json, el objeto scripts sólo hace un alias de test a jest sin opciones adicionales.

Antes de empezar a investigar mis pruebas, ¿hay otra opción de CLI o configuración que me ayude a encontrar la pérdida de memoria?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay opciones adicionales de CLI que pueden ayudarte a encontrar la pérdida de memoria. Una de ellas es --detectLeaks, que no está habilitada de manera predeterminada. Esta opción imprimirá información sobre los objetos que aún están en la memoria después de que se hayan completado todas las pruebas. Otra opción es --logHeapUsage, que registrará el uso de heap después de cada prueba. Esto puede ser útil para identificar la pérdida de memoria.

    También puedes intentar ejecutar tus pruebas con la bandera --verbose, que te dará más información sobre lo que está sucediendo durante las pruebas.

    Además, puedes intentar actualizar tu configuración de Jest para incluir la propiedad setupFilesAfterEnv, que te permite especificar un archivo que se ejecutará antes de cada archivo de prueba. En este archivo, puedes agregar cualquier función de teardown global requerida para asegurarte de que todo esté limpio correctamente.

    // jest.config.js
    module.exports = {
      testEnvironment: 'node',
      maxWorkers: 4,
      testTimeout: 20000,
      setupFilesAfterEnv: ['./setup.js']
    };
    
    // setup.js
    afterAll(() => {
      // realiza cualquier limpieza necesaria aquí
    });
    

    Al agregar estas opciones y configuraciones, deberías ser capaz de identificar y resolver cualquier posible pérdida de memoria en tus pruebas.

Comments are closed.