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?
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.Al agregar estas opciones y configuraciones, deberías ser capaz de identificar y resolver cualquier posible pérdida de memoria en tus pruebas.