بينما قد تكون هناك حالات استخدام أخرى للقدرة على طلب ملفات PEGJS مباشرة في Node في وقت التشغيل ، فإن الهدف الرئيسي من هذه المشكلة هو تغطية الكود (على سبيل المثال ، لاختبارات Mocha).
ستحتاج حالة الاستخدام الأخيرة هذه لتغطية الكود أولاً إلى رقم 93 (توفير خرائط المصدر) ليتم تنفيذها أولاً. إذا تم تنفيذه ، يمكن للمرء تجنب الحاجة إلى نسخة آلية منفصلة من اختبارات الفرد + كود الربط.
أرى أن Node's require.extensions
يستخدم لإنجاز هذا مقابل ts-node
، وعلى الرغم من أن require.extensions
تم إهماله تقنيًا في Node ، وفقًا للمناقشات حول https://stackoverflow.com/ الأسئلة / 28884377 / better-way-to-need-extension-with-node-js (خاصة في سياق هذه الإجابة ) ، يبدو أنها الآلية العملية الوحيدة هنا ، ووفقًا للتعليق ، لا أعتقد علينا أن نقلق بشأن كسر عقدة بابل.
أفضل عدم السماح بذلك.
@ ExE-Boss: بالنسبة لحالة الاستخدام الخاصة بنا ، سيكون فقط للاختبار (أيضًا ، لست متأكدًا مما إذا كنت قد لاحظت أن هذا هو إعادة pegjs.)
أعلم أن هذا هو مستودع PEG.js ، وهذا هو بالضبط سبب معارضتي لتطبيق هذا هنا.
حسنًا ، رائع ... (يمكنني أحيانًا اتباع رابط إلى ريبو آخر دون أن ألاحظ أنها ليست مشكلة منفصلة ، لذا تأكد فقط) :)
لم يعد هناك المزيد من الميزات حتى عام 2017 الذي يسمح لنا باستخدام وحدات es6 والأسهم.
أيضًا ، يبدو أن ما تريده بالفعل هو الاختبار
لا تضع خطافات التغطية في المكتبة. قمت بوضعهم في ملف الاختبار.
إذا كنت تريد التغطية ، يمكنك تثبيت jest
الأمر للتو. يتضمن تلقائيًا كل ما تحتاجه ولا يلزم إجراء أي تعديلات على المكتبة. تم تصميم أدوات التغطية لتتم إضافتها من الخارج وليس من الداخل.
يجب ألا يتم ربط مولد المحلل اللغوي هذا فجأة بالنظام البيئي للحزمة node.js
كميزة داخلية.
إلى جانب ذلك ، فإن التغطية هي رغبة خاطئة لمحلل. ضع في اعتبارك ما يلي:
Food
/ "Peanuts"
/ "Shellfish"
/ "Rice"
الآن ، اكتب فقط اختبارًا للأرز. peg
سيحاول Peanuts
أولاً ، ثم عندما لا يعمل peg
سيحاول Shellfish
، ثم peg
سيحاول Rice
لاحظ أنك كتبت اختبارًا مقابل Rice
فقط ، لكنك تعرض تغطية غير صحيحة لجميع الثلاثة
الطريقة التي يعمل بها محلل Packrat (بصراحة الطريقة التي يمكنني التفكير بها من قبل المحلل اللغوي) تعني أن التغطية مزيفة
لا تضيعوا وقتكم
بقدر ما يتم وضع خطافات التغطية في المكتبة ، عادةً ما يضعها المرء في اختباراته ، نعم ، ولكن عندما يتم إنشاء المحلل اللغوي تلقائيًا مع بعض الفروع ذات الصلة والبعض الآخر غير ذلك ، فمن المنطقي أن يقوم المولد التلقائي بإنتاج هذا بحيث يمكن لتلك المشاريع التي لا ترغب في تجاهل ملف المحلل أن تفعل ذلك. لا يتعلق بتغطية مكتبة pegjs (التي لها متطلبات التغطية الخاصة بها) ولكن بتغطية استخدام المحلل اللغوي للقواعد.
في المثال الخاص بك ، يحتوي المحلل اللغوي الذي تم إنشاؤه على سطور من التعليمات البرمجية للتحقق من "الفول السوداني" و "المحار" و "الأرز" ، وإذا لم يتم تغطيتها ، فيمكن بالفعل الإبلاغ عنها.
يصبح السؤال مفتوحًا أكثر عما إذا كانت قاعدة مثل ruleA = ruleB / ruleC
يجب أن تتحقق من أن "ruleA" لها حالات مع كل من "ruleB" و "ruleC" ، أو ما إذا كانت كافية للتحقق من "ruleA" أو "ruleB" ، و "ruleC" تتم تغطيتها بطريقة ما (على سبيل المثال ، إذا كان هناك ruleD = ruleB / ruleF
، فإن تغطيتها ruleB
يمكن رؤيتها من قبل بعض المشاريع على أنها كافية لتجنب الحاجة إلى التحقق منها مغطاة ضمن "القاعدة أ" ، خاصة إذا كان هناك الكثير من البدائل والتركيبات).
فيما يتعلق بهذه المشكلة ، يمكن أن يكون هناك ملف دخول يضيف الميزة وآخر لا.
@ brettz9 - كنت على وشك أن أقول "إنني أتحدث إلى شخص آخر حول نفس الشيء" ثم أدركت أنه أنت ، لذلك ، سأوقف هذا المثال من هذه المناقشة لصالح المناقشة المماثلة الحصول على # 633 ، إذا كان هذا يبدو جيدًا لك
أنا أكتب شيئًا طويلًا هناك حاليًا
التعليق الأكثر فائدة
@ brettz9 - كنت على وشك أن أقول "إنني أتحدث إلى شخص آخر حول نفس الشيء" ثم أدركت أنه أنت ، لذلك ، سأوقف هذا المثال من هذه المناقشة لصالح المناقشة المماثلة الحصول على # 633 ، إذا كان هذا يبدو جيدًا لك
أنا أكتب شيئًا طويلًا هناك حاليًا