مِرقاب المطابقة
المحرّكات نفسها موجودة مرّتين، بلغتين، ولا تُشارَك أبدًا. وكيف تُلزَم بالتطابق.
src/engines/parity/parity.test.tssrc/engines/parity/dart-output.jsonمحرّكات الدرجة والمحاكاة والقرار موجودة مرّتين: مرّة بلغة دارت على الهاتف، ومرّة بالتايب سكربت في هذا الموقع. ولا تُشارَك أبدًا، وهذا هو الجزء المقصود.
فالمحرّك المشترك — حزمةٌ يستوردها الجانبان — يربط إصدار الجوّال بنشر الويب. غيّر عتبةً واحدة فيلزمك نشر تطبيقين معًا، إلى الأبد، أو القبول بأن أحدهما يشغّل حساب الشهر الماضي دون أن يقول ذلك.
فبدلًا من ذلك: تنفيذان، ومِرقابٌ يُفشل البناء عند اختلافهما.
الملفّات الثلاثة
| الملفّ | المستودع | الدور |
|---|---|---|
fixtures.json | الويب | المُدوَّنة المعياريّة. مُدخلات فقط — بلا قيم متوقّعة. |
parity_export_test.dart | الجوّال | يشغّل المُدخلات على محرّكات دارت الحقيقيّة ويكتب ما أنتجته. |
parity.test.ts | الويب | يشغّل المُدخلات نفسها على محرّكات التايب سكربت ويؤكّد التطابق التامّ. |
والقيم المتوقّعة لا تُكتب يدويًّا أبدًا. بل هي ما أنتجته دارت فعلًا، ما يعني أن المِرقاب لا يُرضيه أن يحدّث أحدهم رقمًا في ملفّ اختبار ليوافق تغييرًا أجراه للتوّ.
لماذا لم تكفِ اختبارات الوحدة المنقولة
نُقل كل محرّك على مجموعة اختبارات التطبيق نفسها بوصفها مواصفته، ونجح. وهذا لازم غير كافٍ.
فالتأكيد لا يثبّت إلّا الحالات التي فكّر أحدهم في كتابتها. ويمكن للنقل أن ينجح في كلٍّ منها بينما يختلف في التسعين حالة التي لم يكتب لها أحد اختبارًا. والمِرقاب يغطّي المُدوَّنة لا التأكيدات.
مُدخلات الحدود هي النصف الحامل
كل مُدخَل باسم boundary * يقع تمامًا على ثابت من ثوابت المحرّك، أو على بُعد
خطوة واحدة منه: عتبات النطاقات ١٫٠ / ٠٫٧ / ٠٫٤، وبوّابات «قيد التكوّن»، وعتبة
المَيْل ±٣، ونطاقات درجة الصحّة ٤٠ / ٧٠.
تشغيله
npm test
ثلاثمئة وستّون اختبارًا. وإن احمرّت بعد تغيير في محرّكات دارت، فالمِرقاب يؤدّي عمله: إمّا أن النقل انحرف، وإمّا أن التغيير على الهاتف لم يكن التغيير الذي قصده أحد.