Cucumber-js: استبدل process.exit () بـ process.exitCode

تم إنشاؤها على ٣ أغسطس ٢٠١٧  ·  6تعليقات  ·  مصدر: cucumber/cucumber-js

هل سيكون من الممكن استبدال مكالمات process.exit () (زوجان في run.js هو كل ما يمكنني العثور عليه) بـ process.exitCode وفقًا لتوصية Node.js المرتبطة أدناه. إنها حالتي Cucumber.js تنهي Node قبل أن تتاح الفرصة لمسجل الملفات غير المتزامن للتدفق ، من بين العمليات الأخرى المعلقة المحتملة في حلقة الحدث.

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

من المهم ملاحظة أن استدعاء process.exit () سيجبر العملية على الخروج بأسرع ما يمكن حتى إذا كانت هناك عمليات غير متزامنة معلقة لم تكتمل بعد بشكل كامل ، بما في ذلك عمليات الإدخال / الإخراج للمعالجة .stdout و process.stderr . في معظم الحالات ، ليس من الضروري استدعاء process.exit () صراحةً. سيتم إنهاء عملية Node.js من تلقاء نفسها إذا لم يكن هناك عمل إضافي معلق في حلقة الحدث. يمكن تعيين خاصية process.exitCode لإخبار العملية برمز الإنهاء الذي يجب استخدامه عند إنهاء العملية بأمان.

help wanted good first issue

التعليق الأكثر فائدة

أنا متردد في القيام بذلك لأنني أعتقد أن المستخدمين الآخرين قد يواجهون مشكلات (أفكر بشكل أساسي في أولئك الذين يستخدمونها لاختبار المتصفح وهو المكان الذي أتذكر تعليقه فيه). كما أن توصية العقدة هذه موجودة فقط في الإصدارين 6 و 8. وهي غير موجودة في الإصدار 4 والتي سيتم دعمها حتى أبريل 2018 (عندما تسقط العقدة الدعم). سأكون جيدًا مع إضافة خيار CLI لهذا بالرغم من ذلك. شيء مثل --drain-event-loop والذي سيستخدم process.exitCode بدلاً من process.exit.

ال 6 كومينتر

هل يمكنك الانتظار حتى ينتهي المسجل في تعريف الخطاف / الخطوة؟ أتذكر أن هناك العديد من الحالات التي لا يخرج فيها cucumber-js لأنه كان ينتظر كل شيء للخروج من حلقة الحدث

الحل الحالي الذي أستخدمه هو setTimeout تعسفيًا في AfterFeatures ، ولكن بعد التعلم سابقًا حول exitCode وإعادة النظر في الاختراق بسبب انخفاض القيمة القادم registerHandler I قمت بتحرير run.js المحلي ويبدو أنه يعمل بشكل رائع. من الجدير بالتأكيد إعادة النظر بسبب 1) توصية مسؤول Node ، 2) تأخير لكل عملية يقدمه setTimeout الوهمي عند التشغيل بالتوازي و 3) عند تنفيذ Cucumber بواسطة عملية Node أخرى.

فكرت في الأمر معلقًا إلى الأبد ، لكن ألا تهتم مهلة الخطوات الفردية بأي شيء غير محدود؟ يجب أن تكون هناك طريقة رائعة لطلب الخروج مع انتهاء المهلة في Node دون الإنهاء على الفور.

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

أنا متردد في القيام بذلك لأنني أعتقد أن المستخدمين الآخرين قد يواجهون مشكلات (أفكر بشكل أساسي في أولئك الذين يستخدمونها لاختبار المتصفح وهو المكان الذي أتذكر تعليقه فيه). كما أن توصية العقدة هذه موجودة فقط في الإصدارين 6 و 8. وهي غير موجودة في الإصدار 4 والتي سيتم دعمها حتى أبريل 2018 (عندما تسقط العقدة الدعم). سأكون جيدًا مع إضافة خيار CLI لهذا بالرغم من ذلك. شيء مثل --drain-event-loop والذي سيستخدم process.exitCode بدلاً من process.exit.

فقط أريد أن أضيف أن هذه المشكلة تمثل مشكلة حقيقية لتشغيل Cucumber.js كعملية فرعية. أفعل ذلك باستخدام --format json ، وإذا زاد إنتاجي عن حجم الكتلة البالغ 8 كيلو بايت لتيار stdout ، فأنا أستعيد الجزء الأول فقط قبل أن ينهي Cucumber process.exit العملية الفرعية قبل الأوان ، مما يؤدي إلى اقتطاع الإخراج. أزلت process.exit وتم حل المشكلة.

سأحاول تقديم طلب سحب لهذا قريبًا.

لقد تقدمت بطلب سحب ، على الرغم من أنه غير مكتمل حسب الحل المفضل charlierudolph ؛ لم أفعل جزء علم CLI.

لدي حل بديل للمشكلة المحددة التي كنت أواجهها ، وهي أن تشغيل Cucumber.js في عملية فرعية باستخدام مُنسق JSON كان يقتطع الإخراج بعد أول مقطع دفق stdout ، لأن process.exit يعد خروجًا صعبًا هذه العملية الفرعية لا تنتظر الباقي. كان الحل هو إضافة | cat إلى أمر عملية طفلي ، وهذا سمح لي بتلقي المخرجات الكاملة في العملية الرئيسية.

نرحب بأي شخص لإضافة العلاقات العامة المذكورة أعلاه ، أو قد يكون من المناسب دمجها كما هي في غضون بضعة أشهر عند غروب الشمس 4.

تم قفل سلسلة الرسائل هذه تلقائيًا نظرًا لعدم وجود أي نشاط حديث بعد إغلاقه. الرجاء فتح قضية جديدة للأخطاء ذات الصلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات