Testing در مسیر Lua

یاد بگیرید چطور تمرین‌های Lua خود را در Exercism test کنید


Testهای خود را با این دستور اجرا کنید:

$ busted

برای نصب busted به نصب Lua به‌صورت محلی مراجعه کنید.

Debug کردن Testهای واحد

این راهنما نشان می‌دهد چطور VSCode را همراه با Busted به‌عنوان framework آزمون و Local Lua Debugger راه‌اندازی کنید تا بتوانید هم در فایل spec آزمون و هم در فایلی که آزمون می‌شود نقطه‌ی توقف بگذارید و گردش کار سرراست Test Driven Development را ممکن کنید. این روش رسمی و یگانه‌ای نیست؛ ممکن است روش‌های زیادی کار کنند، اما این روش دست‌کم شما را راه می‌اندازد (توجه: این روش آزمایش شده و روی Windows 10 و Ubuntu 20.04 کار می‌کند).

خب، حالا که این اصطلاحات تخصصی را کنار گذاشتیم، بیایید شروع کنیم.

می‌توانید از این بخش‌ها بگذرید، چون فقط برای توضیح فرایند هستند.

در VSCode همه‌ی افزونه‌های Debug دیگر برای Lua را حذف یا غیرفعال کنید و Local Lua Debugger را نصب کنید. سپس یک پیکربندی راه‌اندازی سفارشی مثل این بسازید:

{
	"name": "Busted",
	"type": "lua-local",
	"request": "launch",
	"program": {
		"command": "busted"
	},
	"cwd": "${workspaceFolder}/${relativeFileDirname}",
	"args": ["${file}"],
	"integratedTerminal": true
}

توجه: ویژگی integratedTerminal هشداری می‌دهد با این متن که Property integratedTerminal is not allowed، اما می‌توانید با خیال راحت آن را نادیده بگیرید.

ویژگی cwd پوشه‌ی کاری جاری را مشخص می‌کند و این برای پیدا کردن مسیر فایل‌ها مهم است. Exercism به‌صورت پیش‌فرض هر تمرین را در پوشه‌ی خودش، زیر پوشه‌ای به اسم مسیر، نصب می‌کند. پس در مورد Lua به این شکل است:

└── Exercism/
    ├── lua/
    │   ├── armstrong-numbers
    │   ├── bank-account
    │   ├── binarysearch
    │   └── etc...
    └── python/
        └── etc...

پس وقتی VSCode را از پوشه‌ی /lua این‌طور باز می‌کنیم:

C:\users\<username>\Exercism\lua> code .

یا

/home/<username>/exercism/lua> code .

VSCode هر تمرین را در پوشه‌ی خودش در فضای کاری ما نشان می‌دهد. یعنی باید پیکربندی راه‌اندازی را طوری تغییر دهیم که پوشه‌ی کاری جاری، یعنی cwd، برای هر پوشه‌ی تمرین جداگانه تنظیم شود. این کار را با ترکیبی از متغیرهای VSCode یعنی ${workspaceFolder} و ${relativeFileDirname} انجام می‌دهیم.

ویژگی args مشخص می‌کند چه آرگومانی باید به Busted داده شود. در اینجا از متغیر ${file} استفاده می‌کنیم تا به فایل بازشده‌ی کنونی اشاره کنیم.

سپس این سه خط را به بالای فایل Test تمرینی که روی آن کار می‌کنید، یعنی <exercise_name>_spec.lua، اضافه کنید:

if os.getenv("LOCAL_LUA_DEBUGGER_VSCODE") == "1" then
  require("lldebugger").start()
end

حالا وقتی می‌خواهید Testها را با debugger اجرا کنید، فایل Test را باز کنید و بعد پیکربندی راه‌اندازی‌ای را که تازه ساختید، از نوار کناری Run and Debug (Ctrl+Shift+D) در سمت چپ اجرا کنید. اگر فایل Test فعال باشد، پیکربندی راه‌اندازی همان Testها را اجرا می‌کند، روی نقطه‌های توقف می‌ایستد و خروجی را در تب DEBUG CONSOLE در ترمینال یکپارچه‌ی پایین چاپ می‌کند.

برنامه‌نویسی لذت‌بخش!