Cucumber-js: Ersetzen Sie process.exit() durch process.exitCode

Erstellt am 3. Aug. 2017  ·  6Kommentare  ·  Quelle: cucumber/cucumber-js

Wäre es möglich, process.exit()-Aufrufe (ein paar in run.js sind alles, was ich finden konnte) durch process.exitCode gemäß der unten verlinkten Node.js-Empfehlung zu ersetzen. In meinem Fall beendet Cucumber.js Node, bevor der asynchrone Dateilogger die Möglichkeit hat, neben anderen möglichen ausstehenden Operationen in der Ereignisschleife zu leeren.

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

Beachten Sie, dass der Aufruf von process.exit() den Prozess so schnell wie möglich beenden wird, auch wenn noch asynchrone Operationen anstehen, die noch nicht vollständig abgeschlossen sind, einschließlich E/A-Operationen an process.stdout und process.stderr . In den meisten Situationen ist es nicht notwendig, process.exit() explizit aufzurufen. Der Node.js-Prozess wird von selbst beendet, wenn keine zusätzliche Arbeit in der Ereignisschleife ansteht. Die Eigenschaft process.exitCode kann festgelegt werden, um dem Prozess mitzuteilen, welcher Exit-Code verwendet werden soll, wenn der Prozess ordnungsgemäß beendet wird.

help wanted good first issue

Hilfreichster Kommentar

Ich zögere, dies zu tun, da ich denke, dass andere Benutzer Probleme haben könnten (ich denke hauptsächlich an diejenigen, die es für Browsertests verwenden, bei denen ich mich erinnere, dass es hängen blieb). Außerdem existiert diese Node-Empfehlung nur in den Versionen 6 und 8. Sie existiert nicht in der Version 4, die bis April 2018 unterstützt wird (wenn der Node die Unterstützung abbricht). Ich wäre gut, wenn ich dafür eine CLI-Option hinzufügen würde. Etwas wie --drain-event-loop das process.exitCode anstelle von process.exit verwendet.

Alle 6 Kommentare

Können Sie warten, bis der Logger mit einer Hook-/Schritt-Definition fertig ist? Ich erinnere mich, dass es viele Fälle gab, in denen gurke-js nicht beendet wurde, da es darauf wartete, dass alles die Ereignisschleife verlässt

Die aktuelle Problemumgehung, die ich verwende, ist ein willkürliches setTimeout in AfterFeatures , aber nachdem ich zuvor etwas über exitCode erfahren und den Hack aufgrund der bevorstehenden registerHandler Abwertung noch einmal besucht habe I Habe lokale run.js bearbeitet und es scheint super zu funktionieren. Es ist auf jeden Fall einen erneuten Besuch wert, weil 1) die offizielle Node-Empfehlung, 2) die Verzögerung pro Prozess, die das Dummy-setTimeout bei der parallelen Ausführung einführt, und 3) bei der Ausführung von Cucumber durch einen anderen Node-Prozess.

Ich dachte daran, dass es für immer hängen würde, aber würde die Zeitüberschreitung bei einzelnen Schritten nicht um etwas Unendliches kümmern? Es muss eine elegante Möglichkeit geben, einen Exit mit Timeout in Node anzufordern, ohne sofort zu beenden.

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

Ich zögere, dies zu tun, da ich denke, dass andere Benutzer Probleme haben könnten (ich denke hauptsächlich an diejenigen, die es für Browsertests verwenden, bei denen ich mich erinnere, dass es hängen blieb). Außerdem existiert diese Node-Empfehlung nur in den Versionen 6 und 8. Sie existiert nicht in der Version 4, die bis April 2018 unterstützt wird (wenn der Node die Unterstützung abbricht). Ich wäre gut, wenn ich dafür eine CLI-Option hinzufügen würde. Etwas wie --drain-event-loop das process.exitCode anstelle von process.exit verwendet.

Ich möchte nur hinzufügen, dass dieses Problem ein echtes Problem für die Ausführung von Cucumber.js als untergeordneten Prozess darstellt. Ich mache das mit --format json , und wenn meine Ausgabe die 8K-Chunk-Größe des stdout-Streams überschreitet, bekomme ich nur den ersten Chunk zurück, bevor process.exit Cucumber den untergeordneten Prozess vorzeitig beendet und abschneidet die Ausgabe. Ich habe die process.exit und das Problem war gelöst.

Ich werde versuchen, dafür demnächst einen Pull-Request zu senden.

Ich habe eine Pull-Anfrage gestellt, obwohl sie gemäß der bevorzugten Lösung von

Ich habe eine Problemumgehung für das spezifische Problem, auf das ich gestoßen bin, nämlich dass die Ausführung von Cucumber.js in einem untergeordneten Prozess mit dem JSON-Formatierer die Ausgabe nach dem ersten stdout-Stream-Chunk abgeschnitten hat, weil process.exit ein so harter Exit ist dieser untergeordnete Prozess wartet nicht auf den Rest. Die Lösung bestand darin, einfach | cat zu meinem untergeordneten Prozessbefehl hinzuzufügen, und das ermöglichte mir, die vollständige Ausgabe im übergeordneten Prozess zu erhalten.

Jeder ist willkommen, die obige PR zu ergänzen, oder es kann angebracht sein, sie in einigen Monaten, wenn Version 4 untergeht, unverändert zusammenzuführen.

Dieser Thread wurde automatisch gesperrt, da nach dem Schließen in letzter Zeit keine Aktivität stattgefunden hat. Bitte öffnen Sie eine neue Ausgabe für verwandte Fehler.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen