یاد بگیرید مسیر Clojure چگونه از مولدهای تست برای تولید تست تمرینها استفاده میکند
مسیر Clojure از یک مولد test برای تولید خودکار testهای تمرینهای عملی استفاده میکند.
این مولد از این واقعیت بهره میبرد که بیشتر تمرینهایی که در مخزن problem-specifications تعریف شدهاند، یک فایل canonical-data.json هم دارند؛ فایلی که ورودیها و خروجیهای استانداردشدهی test را در خود دارد و میتوان از آنها برای پیادهسازی تمرین استفاده کرد.
برای تولید testهای یک تمرین عملی، مولد test این کارها را انجام میدهد:
canonical-data.json آن میخواندtests.toml برای کنار گذاشتن موارد test کنارگذاشتهشده استفاده میکندcanonical-data.json
مولد test، موارد test را از فایل canonical-data.json تمرین و با استفاده از کتابخانهی clojure/data.json تجزیه میکند.
از آنجا که برخی دادههای canonical از تودرتویی استفاده میکنند، هر مورد test تجزیهشده یک فیلد اضافی path هم دارد که ویژگیهای description عناصر والد و همچنین ویژگی description خود مورد test را در بر میگیرد.
توجه: کلیدها بهصورت keyword تجزیه میشوند.
tests.toml
هر تمرین یک فایل tests.toml دارد که در آن میتوان هر test را بهصورت جداگانه کنار گذاشت یا غیرفعال کرد.
مولد test هر مورد testی را که کنارگذاشتهشده علامت خورده باشد (include = false)، حذف میکند.
بعضی تمرینها ممکن است پیش از رندر دادهها به کمی دستکاری نیاز داشته باشند. برای نمونه، ممکن است بخواهید توضیحات را کوتاهتر کنید.
برای دستکاری موارد test، فایلی به نام .meta/generator.clj با فضاینام <slug>-generator تعریف کنید.
برای تغییر موارد test دو راه دارید:
برای بهروزرسانی موردهای test بهصورت جداگانه، تابع زیر را تعریف کنید:
(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 %)))
برای افزودن یا حذف موارد test، تابع زیر را تعریف کنید:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
اگر هر دو تابع را تعریف کنید، ابتدا add-remove-test-cases و سپس update-test-case فراخوانی میشود.
سپس موارد test (که ممکن است تغییر کرده باشند) به فایل .meta/generator.tpl داده میشوند؛ فایلی که تعیین میکند testها بر پایهی آن موارد test چگونه رندر شوند.
سپس قالب رندرشده با cljfmt قالببندی میشود. این کار مزایای زیر را دارد:
در پایان، خروجی قالب رندرشده در فایل test تمرین نوشته میشود.
قالبها با کتابخانهی hbs رندر میشوند که از نحوهی نگارش handlebars پشتیبانی میکند (با استفاده از handlebars.java).
مولد test را به دو طریق میتوان اجرا کرد:
bin/generate-tests: تولید testها برای همهی تمرینهایی که قالب مولد دارندbin/generate-tests <slug>: تولید testها برای تمرین مشخصشده، در صورتی که قالب مولد داشته باشد