在 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标签页中。

编程愉快!