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