Cucumber-js: Ganti process.exit() dengan process.exitCode

Dibuat pada 3 Agu 2017  ·  6Komentar  ·  Sumber: cucumber/cucumber-js

Apakah mungkin untuk mengganti panggilan process.exit() (hanya beberapa di run.js yang dapat saya temukan) dengan process.exitCode sesuai rekomendasi Node.js yang ditautkan di bawah. Jika kasus saya, Cucumber.js mengakhiri Node sebelum file logger async memiliki kesempatan untuk membersihkan, di antara kemungkinan operasi tertunda lainnya di loop acara.

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

Penting untuk dicatat bahwa memanggil process.exit() akan memaksa proses untuk keluar secepat mungkin bahkan jika masih ada operasi asinkron tertunda yang belum selesai sepenuhnya, termasuk operasi I/O ke process.stdout dan process.stderr . Dalam kebanyakan situasi, sebenarnya tidak perlu memanggil process.exit() secara eksplisit. Proses Node.js akan keluar dengan sendirinya jika tidak ada pekerjaan tambahan yang tertunda di loop acara. Properti process.exitCode dapat diatur untuk memberi tahu proses kode keluar mana yang digunakan saat proses keluar dengan anggun.

help wanted good first issue

Komentar yang paling membantu

Saya ragu untuk melakukan ini karena saya pikir pengguna lain mungkin mengalami masalah (saya terutama berpikir tentang mereka yang menggunakannya untuk pengujian browser yang saya ingat pernah hang). Juga rekomendasi node itu hanya ada di versi 6 dan 8. Itu tidak ada di versi 4 yang akan didukung hingga April 2018 (ketika node menghentikan dukungan). Saya akan lebih baik dengan menambahkan opsi CLI untuk ini. Sesuatu seperti --drain-event-loop yang akan menggunakan process.exitCode alih-alih process.exit.

Semua 6 komentar

Bisakah Anda menunggu logger selesai dalam definisi kait/langkah? Saya ingat dengan hati-hati ada banyak kasus di mana mentimun-js tidak keluar karena menunggu semuanya keluar dari loop acara

Solusi saat ini yang saya gunakan adalah setTimeout sewenang-wenang di AfterFeatures , tetapi setelah mempelajari sebelumnya tentang exitCode dan meninjau kembali peretasan karena penyusutan registerHandler saya telah mengedit run.js lokal dan tampaknya berfungsi dengan baik. Ini pasti layak untuk ditinjau kembali karena 1) Rekomendasi resmi Node, 2) penundaan per proses yang diperkenalkan dummy setTimeout saat berjalan secara paralel dan 3) saat menjalankan Mentimun oleh proses Node lainnya.

Saya berpikir tentang itu tergantung selamanya, tetapi tidakkah batas waktu pada langkah-langkah individu menangani sesuatu yang tak terbatas? Harus ada cara yang anggun untuk meminta keluar dengan batas waktu di Node tanpa segera diakhiri.

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

Saya ragu untuk melakukan ini karena saya pikir pengguna lain mungkin mengalami masalah (saya terutama berpikir tentang mereka yang menggunakannya untuk pengujian browser yang saya ingat pernah hang). Juga rekomendasi node itu hanya ada di versi 6 dan 8. Itu tidak ada di versi 4 yang akan didukung hingga April 2018 (ketika node menghentikan dukungan). Saya akan lebih baik dengan menambahkan opsi CLI untuk ini. Sesuatu seperti --drain-event-loop yang akan menggunakan process.exitCode alih-alih process.exit.

Hanya ingin menambahkan bahwa masalah ini menghadirkan masalah nyata untuk menjalankan Cucumber.js sebagai proses anak. Saya melakukan itu dengan --format json , dan jika output saya tumbuh melampaui ukuran potongan 8K dari aliran stdout, saya hanya mendapatkan potongan pertama kembali sebelum process.exit Mentimun secara prematur menghentikan proses anak, memotong hasil. Saya menghapus process.exit dan masalahnya terpecahkan.

Saya akan mencoba mengajukan permintaan tarik untuk ini segera.

Saya mengajukan permintaan tarik, meskipun tidak lengkap per solusi pilihan @charlierudolph ; Saya tidak melakukan bagian bendera CLI.

Saya memiliki solusi untuk masalah spesifik yang saya hadapi, yaitu menjalankan Cucumber.js dalam proses anak dengan formatter JSON memotong output setelah potongan aliran stdout pertama, karena process.exit adalah jalan keluar yang sulit proses anak itu tidak menunggu sisanya. Solusinya hanyalah menambahkan | cat ke perintah proses anak saya, dan itu memungkinkan saya untuk menerima output penuh dalam proses induk.

Siapa saja boleh menambahkan PR di atas, atau mungkin cocok untuk menggabungkannya apa adanya dalam beberapa bulan saat versi 4 berhenti.

Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat