Cucumber-js: Reemplazar process.exit () con process.exitCode

Creado en 3 ago. 2017  ·  6Comentarios  ·  Fuente: cucumber/cucumber-js

¿Sería posible reemplazar las llamadas a process.exit () (un par en run.js es todo lo que pude encontrar) con process.exitCode según la recomendación de Node.js vinculada a continuación? En mi caso, Cucumber.js termina Node antes de que el registrador de archivos asíncrono tenga la oportunidad de vaciar, entre otras posibles operaciones pendientes en el bucle de eventos.

https://nodejs.org/api/process.html#process_process_exit_code

Es importante tener en cuenta que llamar a process.exit () obligará al proceso a salir lo más rápido posible incluso si todavía hay operaciones asincrónicas pendientes que aún no se han completado por completo, incluidas las operaciones de E / S para process.stdout y process.stderr . En la mayoría de las situaciones, no es realmente necesario llamar a process.exit () explícitamente. El proceso de Node.js se cerrará por sí solo si no hay trabajo adicional pendiente en el ciclo de eventos. La propiedad process.exitCode se puede establecer para decirle al proceso qué código de salida utilizar cuando el proceso finaliza correctamente.

help wanted good first issue

Comentario más útil

Dudo en hacer esto porque creo que otros usuarios pueden experimentar problemas (estoy pensando principalmente en aquellos que lo usan para probar el navegador, que es donde recuerdo haberlo colgado). Además, esa recomendación de nodo solo existe en la versión 6 y 8. No existe en la versión 4, que será compatible hasta abril de 2018 (cuando el nodo deje de ser compatible). Sin embargo, sería bueno agregar una opción CLI para esto. Algo como --drain-event-loop que usará process.exitCode en lugar de process.exit.

Todos 6 comentarios

¿Puede esperar a que el registrador termine en una definición de gancho / paso? Recuerdo que hubo muchos casos en los que cucumber-js no salía porque estaba esperando a que todo saliera del bucle de eventos.

La solución alternativa actual que estoy usando es una setTimeout arbitraria en AfterFeatures , pero después de aprender antes sobre exitCode y revisar el truco debido a la próxima depreciación de registerHandler I He editado run.js local y parece funcionar muy bien. Definitivamente vale la pena volver a visitarlo debido a 1) recomendación oficial de Node, 2) retraso por proceso que introduce setTimeout ficticio cuando se ejecuta en paralelo y 3) cuando se ejecuta Cucumber por otro proceso de Node.

Pensé en colgar para siempre, pero ¿el tiempo de espera en pasos individuales no se ocuparía de algo infinito? Debe haber una forma elegante de solicitar una salida con tiempo de espera en Nodo sin terminar de inmediato.

registerHandler('AfterFeatures', function (features, callback) {
  setTimeout(callback, 1000);
});

Dudo en hacer esto porque creo que otros usuarios pueden experimentar problemas (estoy pensando principalmente en aquellos que lo usan para probar el navegador, que es donde recuerdo haberlo colgado). Además, esa recomendación de nodo solo existe en la versión 6 y 8. No existe en la versión 4, que será compatible hasta abril de 2018 (cuando el nodo deje de ser compatible). Sin embargo, sería bueno agregar una opción CLI para esto. Algo como --drain-event-loop que usará process.exitCode en lugar de process.exit.

Solo quiero agregar que este problema presenta un problema real para ejecutar Cucumber.js como un proceso hijo. Estoy haciendo eso con --format json , y si mi salida crece más allá del tamaño de fragmento de 8K de la secuencia de salida estándar, solo obtengo el primer fragmento antes de que process.exit Cucumber termine prematuramente el proceso hijo, truncando La salida. Eliminé el process.exit y se resolvió el problema.

Intentaré enviar una solicitud de extracción para esto pronto.

Presenté una solicitud de extracción, aunque está incompleta según la solución preferida de @charlierudolph ; No hice la parte de la bandera CLI.

Tengo una solución para el problema específico con el que me estaba encontrando, que era que ejecutar Cucumber.js en un proceso secundario con el formateador JSON estaba truncando la salida después del primer fragmento de flujo de stdout, porque process.exit es una salida tan difícil ese proceso hijo no espera el resto. La solución fue simplemente agregar | cat al comando de proceso de mi hijo, y eso me permitió recibir el resultado completo en el proceso principal.

Cualquiera sería bienvenido para agregar al PR anterior, o puede ser apropiado fusionarlo tal como está en unos meses cuando la versión 4 se ponga el sol.

Este hilo se ha bloqueado automáticamente ya que no ha habido ninguna actividad reciente después de que se cerró. Abra un nuevo problema para errores relacionados.

¿Fue útil esta página
0 / 5 - 0 calificaciones