تعرّف على كيفية استخدام مسار Clojure لمولّدات الاختبارات لتوليد اختبارات التمارين.
يستخدم مسار Clojure مولّد اختبارات لتوليد اختبارات التمارين التدريبية تلقائيًا.
وهو يستفيد من كون معظم التمارين المعرّفة في مستودع problem-specifications تحتوي أيضًا على ملف canonical-data.json يضم مدخلات ومخرجات اختبار موحّدة يمكن استخدامها لتنفيذ التمرين.
لتوليد اختبارات تمرين تدريبي، يقوم مولّد الاختبارات بما يلي:
canonical-data.json الخاص بهtests.toml لحذف حالات الاختبار المستبعدةcanonical-data.json
يحلّل مولّد الاختبارات حالات الاختبار من ملف canonical-data.json الخاص بالتمرين باستخدام مكتبة clojure/data.json.
ولأن بعض البيانات القياسية يستخدم التداخل، تتضمن حالة الاختبار المحلّلة حقلًا إضافيًا هو path يحتوي خصائص description لأي عناصر أب، وكذلك خاصية description الخاصة بحالة الاختبار نفسها.
ملاحظة: تُحلَّل المفاتيح ككلمات مفتاحية.
tests.toml
لكل تمرين ملف tests.toml يمكن فيه استبعاد اختبارات فردية أو تعطيلها.
وسيحذف مولّد الاختبارات أي حالات اختبار موسومة بأنها مستبعدة (include = false).
قد تحتاج بعض التمارين إلى بعض التعديلات قبل إصاغة البيانات. مثلًا، قد ترغب في جعل الوصف أقل إسهابًا.
لتعديل حالات الاختبار، عرّف ملف .meta/generator.clj يحتوي فضاء أسماء <slug>-generator.
وهناك أسلوبان لتحويل حالات الاختبار:
لتحديث حالات اختبار فردية، عرّف الدالة التالية:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
يحذف هذا المثال كل العناصر عدا الأخير من قيمة :path (ما يقصّر الوصف):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
لإضافة حالات اختبار أو حذفها، عرّف الدالة التالية:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
إذا عرّفت كلتا الدالتين، فسيُستدعى add-remove-test-cases أولًا ثم update-test-case ثانيًا.
تُمرَّر بعد ذلك حالات الاختبار (المحوّلة إن وُجدت) إلى ملف .meta/generator.tpl، الذي يحدد كيف ينبغي إصاغة الاختبارات بناءً على تلك الحالات.
ثم يُنسَّق القالب المُصاغ باستخدام cljfmt. ولذلك الفوائد التالية:
وأخيرًا، يُكتب ناتج القالب المُصاغ في ملف اختبار التمرين.
تُصاغ القوالب باستخدام مكتبة hbs، التي تدعم صيغة handlebars (باستخدام handlebars.java).
هناك أسلوبان لتشغيل مولّد الاختبارات:
bin/generate-tests: توليد اختبارات كل التمارين التي لها قالب مولّدbin/generate-tests <slug>: توليد اختبارات التمرين المحدد، إذا كان له قالب مولّد