在 Lua 軌道上測試

了解如何在 Exercism 上測試你的 Lua 練習。


用以下指令執行測試

$ busted

安裝busted的說明請參考在本機安裝 Lua。

除錯單元測試

本指南會帶你設定 VSCode 與 Busted 測試框架及 Local Lua Debugger,讓你可以同時在測試檔和受測檔案中設定中斷點,輕鬆進行測試驅動開發的工作流程。這不是唯一做法,可行的方式有很多,但這個方法至少能讓你順利上手(注意:本文做法已在 Windows 10 與 Ubuntu 20.04 上測試過,可正常運作)。

術語都交代完了,我們開始吧。

這幾個部分只是為了說明流程,你可以跳過。

在VSCode中移除或停用其他所有 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...

所以當我們像這樣從 /lua 資料夾開啟 VSCode 時:

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

或

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

VSCode 會在工作區中把每個練習顯示在各自的資料夾裡。這表示我們需要讓啟動設定把目前的工作目錄cwd切換到每個練習各自的資料夾。我們用${workspaceFolder}和${relativeFileDirname}這兩個 VSCode 變數來達成。

args屬性則是要傳給 Busted 的引數。在這裡我們用${file}這個變數來指向目前開啟的檔案。

接著,在你正在進行的練習的測試檔(檔名為<exercise_name>_spec.lua)開頭加上這三行:

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

現在,當你想用除錯器執行測試時,打開測試檔,然後從左側的Run and Debug(Ctrl+Shift+D)側邊欄執行你剛才建立的啟動設定。如果測試檔是目前焦點所在的檔案,這個啟動設定就會執行那些測試、在中斷點停下來,並把輸出列印到下方整合式終端機的DEBUG CONSOLE分頁。

祝你寫程式愉快!