تست در مسیر Unison

بیاموزید چگونه تمرین‌های Unison خود را در Exercism تست کنید.


آشنایی با Unison Codebase Manager

Unison Codebase Manager (UCM) ابزاری است که زبان برنامه‌نویسی Unison را اجرا می‌کند و به شما امکان می‌دهد در کد Unisonی که نوشته‌اید و ذخیره کرده‌اید پیمایش کنید.

💡 یادتان باشد: کد Unison به‌صورت محتوای متنی در فایل ذخیره نمی‌شود. به همین دلیل، به ابزاری نیاز داریم که به ما امکان دهد برنامه‌های Unison را تغییر دهیم و اجرا کنیم.

نوشتن کد Unison به همین سادگی است که ترمینال دلخواهتان را باز کنید و دستور ucm را در پوشه‌ای که قرار است کد Unison خود را در آن بنویسید اجرا کنید. سپس می‌توانید با ویرایشگر متن مورد علاقه‌تان فایلی با پسوند .u بسازید یا باز کنید، مثل scratch.u یا hello.u. بیشتر کارتان به جابه‌جایی میان نمونه‌ی در حال اجرای خط فرمان ucm و فایل .uتان می‌گذرد. UCM به‌محض ذخیره‌ی فایل، به‌طور خودکار تغییرات فایل با پسوند .u شما را زیر نظر می‌گیرد.

پایگاه‌های کد Unison به‌جای ساختار پوشه‌ای، با «فضای نام» سازمان‌دهی می‌شوند. شما در کتابخانه‌ی استاندارد، فضای نامی به اسم base را برای یافتن توابع و انواع داده‌ی مفید بررسی می‌کنید و همزمان با نوشتن کد Unison، فضای نام‌های خودتان را هم می‌سازید. در UCM، پیمایش در پایگاه کد با دستورهای ls و view انجام می‌شود؛ این دو به‌ترتیب برای فهرست کردن محتوای فضای نام و مشاهده‌ی کد منبع به کار می‌روند.

هرچند می‌توانید پایگاه کد خود را از طریق CLI مربوط به UCM پیمایش و مشاهده کنید، شاید بخواهید نمایی گرافیکی و دلپذیر هم از کار خود ببینید. برای این کار کافی است دستور ui را در CLI مربوط به UCM اجرا کنید. پنجره‌ای در مرورگر باز می‌شود که نمایی از کد موجود در پایگاه کدتان را نشان می‌دهد. رابط کاربری محلی پایگاه کد راه خوبی هم برای کاویدن توابع کتابخانه‌ی استاندارد ما، به اسم base، است که ممکن است برای انجام تمرین‌ها به کارتان بیاید. درباره‌ی رابط کاربری محلی پایگاه کد بیشتر بخوانید.

می‌توانید گردش کار برنامه‌نویسی Unison را با تور زبان Unison تمرین کنید.

راه‌اندازی تست‌ها در Exercism

مرور سریع

  1. با دستور project.create پروژه‌ی جدیدی بسازید و اسمی برای آن انتخاب کنید (مثلاً project.create hello-world)

  2. در حالی که UCM پوشه‌ی تمرین را زیر نظر دارد، تغییراتتان را در فایل <myFileName>.u اعمال کنید

  3. فایل <myFileName>.u را ذخیره کنید

  4. اگر فایل از بررسی نوع عبور کرد، دستورهای add یا update را در UCM اجرا کنید

    • اگر فایل از بررسی نوع عبور نکرد، کد فایل <myFileName>.u را تغییر دهید تا کامپایل شود
  5. دستور load <myFileName>.test.u را در CLI مربوط به UCM اجرا کنید تا تست‌ها به دامنه بیایند و اجرا شوند

مرور گام‌به‌گام

اگر روی تمرینی از Exercism در خط فرمان کار می‌کنید، به احتمال زیاد راه‌حلتان را در پوشه‌ای به اسم همان تمرین پیاده‌سازی می‌کنید. برای مثال، اگر تمرین hello-world باشد، باید پس از cd زدن به ~/exercism/unison/hello-world، ucm را از خط فرمان باز کنید و در ucm پروژه‌ای بسازید (مثلاً project.create hello-world). تغییرات پیاده‌سازی‌تان را در فایل hello.u اعمال کنید و وقتی از پیاده‌سازی‌تان راضی بودید، دستور add یا update را در CLI مربوط به Unison Codebase Manager (UCM) وارد کنید تا کارتان از فایل به پایگاه کد اضافه شود.

فایلی که تست‌های هر تمرین را در خود دارد، پسوند .test.u دارد. برای آوردن تست‌ها به دامنه و اجرایشان، باید از دستور load در UCM استفاده کنید. دستور load یک مسیر فایل را به عنوان ورودی می‌گیرد. برای تمرین hello world و پروژه‌ی hello-world، چیزی شبیه این خواهد بود:

hello-world/main> load hello.test.u

باید پیامی از UCM درباره‌ی تعریف‌هایی که به دامنه آمده‌اند ببینید و مهم‌تر از همه نتیجه‌ی اجرای تست:


  ⍟ These new definitions are ok to `add`:

    hello.test : Test.Test
    tests      : [Result]

Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  🚫 FAILED

فرض کنید تست‌هایتان بار اول قبول نشدند. به ویرایش فایل myExercise.u برگردید و پس از ذخیره می‌توانید دستور update را اجرا کنید:

I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:

  ⍟ These names already exist. You can `update` them to your new definition:

    hello : Text

hello-world/main> update

⍟ I've updated these names to your new definition:

  hello : Text

حالا می‌توانیم تست‌هایمان را دوباره بارگذاری کنیم تا ببینیم چیزی تغییر کرده یا نه!

hello-world/main> load hello.test.u
  Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  ✅ Passed : Passed 1 tests.

دستورهای مفید UCM

برای دیدن فهرست دستورهای موجود برای کار با پایگاه کدتان، help را در CLI مربوط به Unison Codebase Manager اجرا کنید. فهرست دستورهای UCM در وب‌سایت ما هم توضیح داده شده است. در ادامه چند مورد از آن‌ها که ممکن است به کارتان بیاید آمده است:

  • add: تعریف‌های جدید فایل .u را به پایگاه کد اضافه می‌کند.
  • update: مثل add کار می‌کند، با این تفاوت که اگر تعریفی در فایل با تعریفی موجود هم‌نام باشد، آن اسم به تعریف جدید اشاره داده می‌شود.
    • اگر تعریف قدیمی وابستگی‌هایی داشته باشد، update در صورت امکان تغییر را به‌طور خودکار گسترش می‌دهد، و در غیر این صورت برای بازآرایی در آینده یک مورد todo می‌سازد.
  • load: فایل scratch با پسوند .u را تجزیه، بررسی نوع و ارزیابی می‌کند. پس از بررسی نوع و ارزیابی، می‌توانید تعریف‌ها را به پایگاه کدتان اضافه کنید.
  • ls: محتوای یک فضای نام را فهرست می‌کند
  • view: کد منبع یک تعریف Unison را نشان می‌دهد
  • ui: رابط کاربری محلی پایگاه کد را باز می‌کند
  • exit: UCM را می‌بندد