تست کردن در مسیر Emacs Lisp

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


testهای Elisp با استفاده از ERT اجرا می‌شوند؛ ERT یک کتابخانه‌ی Emacs Lisp برای testهای رگرسیون/واحد است. testها را می‌توان به چند روش اجرا کرد.

برای اجرای testها به‌صورت تعاملی از داخل Emacs:

  1. فایل test را باز کنید، سپس M-x eval-buffer RET
  2. به‌صورت تعاملی و تک‌تک، با M-x ert RET test-name RET
  3. به‌صورت تعاملی و یک‌جا، با M-x ert RET t RET توجه کنید که این کار همه‌ی testهایی را که هم‌اکنون در Emacs بارگذاری شده‌اند اجرا می‌کند!
  4. هر زمان تغییری دادید، پیش از اجرای test دوباره M-x eval-buffer RET را اجرا کنید

برای اجرای فقط testهای موجود در بافر جاری، می‌توانید این را به .emacs یا init.el خود اضافه کنید:

(defun my-eval-and-run-all-tests-in-buffer ()
  "Delete all loaded tests from the runtime, evaluate the current buffer and run all loaded tests with ert."
  (interactive)
  (ert-delete-all-tests)
  (eval-buffer)
  (ert 't))

پس از راه‌اندازی مجدد Emacs:

  1. فایل test را باز کنید
  2. M-x my-eval-and-run-all-tests-in-buffer RET

test تعاملی زمانی که روی یک تمرین کار می‌کنید عالی است، اما test در حالت batch برای وقتی ترجیح داده می‌شود که می‌خواهید بررسی کنید تمرین آماده‌ی ارسال است.

برای اجرای همه‌ی testها از ترمینال، در حالت batch، دستور emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit را اجرا کنید.

دستور بالا کمی دست‌وپاگیر است، بنابراین اگر دوست دارید:

  1. فایلی روی $PATH خود (احتمالاً در ~/bin) به اسم ert-run بسازید
  2. محتوای فایل باید به این صورت باشد:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. فایل را با chmod +x ert-run قابل اجرا کنید

باید بتوانید به‌سادگی ert-run *-test.el را فراخوانی کنید و testها را در حالت batch اجرا کنید.

گزینه‌های دیگر را می‌توانید در مستندات پیدا کنید: C-h i m ert RET.

کار روی تمرین‌ها

از آنجا که Emacs خودش یک مفسر elisp است، کد در حال کار شما همیشه در محیط اجرای بومی خودش قرار دارد. می‌توانید هر فرمی را با فشردن C-x e در انتهای آن ارزیابی کنید، یا یک بخش انتخابی را با M-x eval-region و یا کل بافر را با M-x eval-buffer. این کار می‌تواند برای debug سریع کدتان بسیار مفید باشد.

پیشنهادها

از آنجا که هم کد شما و هم testهایتان elisp معتبر هستند، پیشنهاد می‌شود کد تمرینتان را در یک پنجره‌ی بافر، کنار test آن، به این صورت باز کنید:

تصویری از Emacs که قاب آن به‌صورت عمودی به دو پنجره تقسیم شده است

قاب را با C-x 3 به‌صورت عمودی تقسیم کنید، با C-x o به پنجره‌ی جدید بروید و فایل را با C-x C-f /path/to/file باز کنید.