Cucumber-js: process.exit()をprocess.exitCodeに置き換えます

作成日 2017年08月03日  ·  6コメント  ·  ソース: cucumber/cucumber-js

以下にリンクされているNode.jsの推奨事項に従って、process.exit()呼び出し(

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

process.stdoutおよびprocess.stderrへのI / O操作を含む、まだ完全に完了していない保留中の非同期操作がまだある場合でも、process.exit()を呼び出すと、プロセスが可能な限り迅速に終了することに注意することが重要です。 。 ほとんどの場合、実際にはprocess.exit()を明示的に呼び出す必要はありません。 イベントループで保留中の追加の作業がない場合、Node.jsプロセスは自動的に終了します。 process.exitCodeプロパティを設定して、プロセスが正常に終了するときに使用する終了コードをプロセスに指示できます。

help wanted good first issue

最も参考になるコメント

他のユーザーが問題を経験するかもしれないと思うので、私はこれをするのをためらっています(私は主にそれをハングさせたことを覚えているブラウザテストにそれを使用している人々について考えています)。 また、そのノード推奨はバージョン6と8にのみ存在します。バージョン4には存在せず、2018年4月(ノードがサポートを終了するとき)までサポートされます。 ただし、このためのCLIオプションを追加するとよいでしょう。 process.exitの代わりにprocess.exitCodeを使用する--drain-event-loopようなもの。

全てのコメント6件

ロガーがフック/ステップ定義で終了するのを待つことができますか? すべてがイベントループを終了するのを待っていたため、cucumber-jsが終了しない場合が多かったことを覚えています。

私が使用している現在の回避策は任意であるsetTimeoutAfterFeaturesが、約以前の学習後のexitCodeとにより、今後へのハッキングを再訪registerHandler減価償却Iローカルのrun.jsを編集しましたが、うまく機能しているようです。 1)ノードの公式推奨事項、2)並列実行時にダミーのsetTimeoutが導入するプロセスごとの遅延、および3)他のノードプロセスによってCucumberを実行する場合のため、再検討する価値があります。

私はそれが永遠にぶら下がっていると思ったが、個々のステップでタイムアウトすることは無限の何かを処理しませんか? すぐに終了せずに、ノードでタイムアウト付きの終了を要求する適切な方法が必要です。

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

他のユーザーが問題を経験するかもしれないと思うので、私はこれをするのをためらっています(私は主にそれをハングさせたことを覚えているブラウザテストにそれを使用している人々について考えています)。 また、そのノード推奨はバージョン6と8にのみ存在します。バージョン4には存在せず、2018年4月(ノードがサポートを終了するとき)までサポートされます。 ただし、このためのCLIオプションを追加するとよいでしょう。 process.exitの代わりにprocess.exitCodeを使用する--drain-event-loopようなもの。

この問題は、Cucumber.jsを子プロセスとして実行する場合の実際の問題を提示することを付け加えたいと思います。 私は--format jsonでそれを行っており、出力がstdoutストリームの8Kチャンクサイズを超えた場合、Cucumberのprocess.exitが子プロセスを途中で終了して切り捨てる前に、最初のチャンクのみを取得します。出力。 process.exitを削除すると、問題は解決しました。

すぐにプルリクエストを送信しようと思います。

@charlierudolphの推奨ソリューションでは不完全ですが、プルリクエストを提出しました。 CLIフラグの部分は行いませんでした。

process.exitは非常に難しい出口であるため、JSONフォーマッターを使用して子プロセスでCucumber.jsを実行すると、最初のstdoutストリームチャンクの後に出力が切り捨てられるという、発生した特定の問題の回避策があります。その子プロセスは残りを待ちません。 解決策は、子プロセスコマンドに| catを追加すること

誰でも上記のPRに追加することを歓迎します。あるいは、バージョン4が廃止される数か月以内に、そのままマージすることが適切な場合があります。

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

charlierudolph picture charlierudolph  ·  33コメント

jbpros picture jbpros  ·  28コメント

znevrly picture znevrly  ·  16コメント

charlierudolph picture charlierudolph  ·  17コメント

osher picture osher  ·  16コメント