Estoy usando mocha con Nodejs para probar mi restApi. Cuando ejecuto mocha, le digo a mi prueba que cree un child_process y ejecute la API para poder hacerle solicitudes.
El problema es que cada vez que la prueba finaliza (finaliza o falla), parece que la API sigue ejecutándose en segundo plano. He visto algunas respuestas aquí que dan instrucciones para eliminar manualmente el proceso secundario cada vez que sale el proceso principal. Así que lo hice así:
export function startProcess(done) { const child = spawn('babel-node', ["app.js"]); child.stdout.on("data", function(data) { data = data.toString(); // console.log(data.toString()); if(data.indexOf("Server online") > -1) done(); }); child.stderr.on('data', function(err) { console.log("ERROR: ", err.toString()); }); child.on('exit', function(code) { console.log("PROPERLY EXITING"); console.log("Child process exited with code", code); }); process.on('exit', function(code) { console.log("Killing child process"); child.kill(); console.log("Main process exited with code", code); }); } Cuando el proceso principal sale, registra "Killing child process", lo que significa que se child.kill() . Pero si trato de ejecutar mi prueba nuevamente, cuando se llama al comando de generación, la API arroja un error
Error: escucha EADDRINUSE :::3300
, lo que significa que la API aún se está ejecutando y se toma esa dirección de puerto.
Así que tengo que ejecutar sudo pkill node para eliminar realmente todo el proceso del nodo y luego npm test vuelve a funcionar.
¿Me estoy perdiendo de algo? ¿Es esta realmente la manera de lograr lo que estoy esperando?
Pensé en usar child_process.exec para ejecutar sudo pkill node en mi procesador. on process.on('exit') oyente, pero eso no parece ser algo inteligente.
Esto está sucediendo tanto en Mac como en Ubuntu.
¿Alguna sugerencia? Gracias
"salir" es un evento que se activa cuando el nodo finaliza su ciclo de eventos internamente, no se activa cuando finaliza el proceso externamente.
Lo que estás buscando es ejecutar algo en un SIGINT.
Eche un vistazo a http://nodejs.org/api/process.html#process_signal_events