آزمایش در مسیر YAMLScript

یاد بگیرید چطور تمرین‌های YAMLScript خود را در Exercism آزمایش کنید.


تست کردن راه‌حل‌های تمرین‌های Exercism که با YAMLScript نوشته شده‌اند بسیار آسان است. اجرا کردنشان آسان است و فهمیدنشان هم آسان.

کافی است در پوشه‌ی تمرین make test را اجرا کنید.

بار اولی که make test را اجرا می‌کنید، همه‌ی تست‌ها شکست می‌خورند، فقط به این دلیل که هنوز کدی برای حل تست‌ها ننوشته‌اید.

روند معمول توسعه‌ی یک تمرین این است که با make test شروع کنید و بعد هر بار روی یک تست تمرکز کنید و کدی بنویسید که آن تست را پاس کند. وقتی همه‌ی تست‌ها پاس شدند، کارتان تمام است!

به‌عنوان یک مزیت اضافه، اجرای make test همچنین مطمئن می‌شود که نسخه‌ی درست مفسر ys زبان YAMLScript (همان نسخه‌ای که تمرین فعلی لازم دارد) در جای درست (در /path/to/exercism/yamlscript/.local/) نصب شده است. یعنی برای شروع لازم نیست حتی از قبل ys را نصب کنید!

ساختار پوشه‌ی یک تمرین

اگر روی تمرینی به اسم the-great-exercise کار می‌کنید، exercism download --exercise=the-great-exercise --track=yamlscript پوشه‌ی /path/to/exercism/yamlscript/the-great-exercise را می‌سازد.

در این پوشه، نام فایل تست the-great-exercise-test.ys و نام فایل برنامه‌ی راه‌حل the-great-exercise.ys خواهد بود. یک فایل README.md هم با شرح تمرین و یک فایل HELP.md با اطلاعات مفید برای وقتی که گیر می‌کنید وجود دارد.

دو فایل برای make وجود دارد: Makefile و GNUmakefile. این کار برای این است که مطمئن شوید (بدون قصد جناس) از GNU make برای اجرای تست‌ها استفاده می‌کنید و نه از دستور make دیگری که ممکن است روی سیستم شما نصب باشد. فایل GNUmakefile همان فایل اصلی است و GNU make همیشه آن را به Makefile ترجیح می‌دهد. سایر دستورهای make از Makefile استفاده می‌کنند که باید با پیامی خطا بدهند و به شما بگویند از GNU make استفاده کنید!

اجزای یک فایل تست

تست‌های YAMLScript طبیعتاً با خود YAMLScript نوشته می‌شوند! با توجه به اینکه YAMLScript همان YAML است و YAML هم داده است، تست‌ها عملاً فقط داده‌اند.

این یک نمونه از یک فایل تست ساده است. در واقع ۳ تست اول تمرین acronym است. :-)

#!/usr/bin/env ys-0

use ys::taptest: :all
load: 'acronym.ys'

test::
- name: Basic
  code: abbreviate('Portable Network Graphics')
  want: PNG

- name: Lowercase words
  code: abbreviate('Ruby on Rails')
  want: ROR

- name: Punctuation
  code: abbreviate('First In, First Out')
  want: FIFO

done: 3

خط اول یک «شبانگ» است که به دستور prove (که Makefile آن را اجرا می‌کند) می‌گوید برای اجرای تست‌ها به‌جای perl که پیش‌فرض prove است، از مفسر ys مربوط به YAMLScript استفاده کند.

خط دوم یک دستور use است که کتابخانه‌ی تست TAP با نام ys::taptest در YAMLScript را بارگذاری می‌کند.

نکته: TAP یک رابط ساده‌ی متنی بین اسکریپت‌های تست و هارنس‌های تست است و prove هارنس استاندارد برای اجرای تست‌های TAP در Perl است. چون Perl همه‌جا هست، استفاده از TAP و prove در نهایت انتخاب بسیار خوبی برای مجموعه‌تست‌ها در بسیاری از زبان‌ها (از جمله YAMLScript) می‌شود.

دستور use برنامه‌ی راه‌حل acronym.ys را بارگذاری می‌کند تا این فایل تست آن را تست کند.

همه‌ی تست‌های ما در یک دنباله‌ی YAML زیر کلید test قرار دارند.

خط آخر یعنی done: الزامی است و به هارنس تست می‌گوید که همه‌ی تست‌ها واقعاً اجرا شده‌اند. عدد (که اختیاری است) تعداد تست‌هایی است که انتظار داشتیم اجرا شوند.

هر تست (زیر کلید test) یک نگاشت است با این جفت‌های کلید/مقدار:

  • name: - برچسب تست که با prove -v چاپ می‌شود.
  • code: - کد YAMLScript که باید اجرا شود. این کد یکی از توابع برنامه‌ی راه‌حلی را که رویش کار می‌کنیم فراخوانی می‌کند.
  • what: - برای تست‌هایی که انتظار می‌رود خطایی رخ دهد، مقدار error است. در تست‌های عادی، این جفت وجود ندارد.
  • want: - نتیجه‌ی مورد انتظار تست. این یک مقدار YAML است و ممکن است رشته، عدد، «منطقی»، دنباله یا نگاشت باشد. اگر what: برابر error باشد، این مقدار پیام خطای مورد انتظار است.
  • SKIP: - این را روی true بگذارید تا آن تست اجرا نشود.
  • ONLY: - این را روی true بگذارید تا فقط آن تست اجرا شود. اگر بیش از یک تست ONLY: داشته باشید، هر کدام از آن‌ها اجرا می‌شود.

این باید همه‌چیزهایی باشد که برای انجام توسعه‌ی تست‌محور در YAMLScript برای تمرین‌های Exercism لازم دارید!

کتابخانه‌ی ys::taptest قابلیت‌های دیگری هم دارد که می‌توانید برای نوشتن تست‌های پیچیده‌تر از آن‌ها استفاده کنید، اما تست‌های Exercism از قبل برای شما نوشته شده‌اند. برای یادگیری بیشتر درباره‌ی کتابخانه‌ی ys::taptest، مستندات را ببینید.