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を、演習ごとのフォルダーに変更する必要があります。これは、VSCodeの変数である${workspaceFolder}と${relativeFileDirname}を組み合わせて行います。

argsプロパティには、Bustedに渡す引数を指定します。ここでは、現在開いているファイルを参照する変数${file}を使っています。

次に、取り組んでいる演習のテストファイル(名前は<exercise_name>_spec.lua)の先頭に、次の3行を追加します:

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

これで、デバッガーを使ってテストを実行したいときは、テストファイルを開き、左側のRun and Debug(Ctrl+Shift+D)サイドバーから、作成した起動構成を実行します。テストファイルにフォーカスがあると、起動構成がそのテストを実行し、ブレークポイントで停止して、下部の統合ターミナルのDEBUG CONSOLEタブに出力を表示します。

コーディングを楽しみましょう!