了解如何在 Exercism 上测试你的 Emacs Lisp 练习
Elisp 的测试使用 ERT 来运行,这是一个用于回归测试和单元测试的 Emacs Lisp 库。测试可以通过多种方式运行。
要在 Emacs 中交互式地运行测试:
M-x eval-buffer RET
M-x ert RET test-name RET
M-x ert RET t RET
注意,这会运行当前已加载到 Emacs 中的所有测试!M-x eval-buffer RET
如果只想运行当前缓冲区中的测试,可以把下面的代码加到你的 .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 后:
M-x my-eval-and-run-all-tests-in-buffer RET在做练习的过程中,交互式测试非常好用,但如果你想确认练习已经可以提交,批处理模式测试更合适。
要在终端中以批处理模式运行所有测试,请执行 emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit
上面的命令稍微有点繁琐,所以如果你愿意,可以这样做:
$PATH 上(大概在 ~/bin 里)创建一个名为 ert-run 的文件#!/usr/bin/env sh
emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
chmod +x ert-run 让这个文件变成可执行文件这样你只要调用 ert-run *-test.el,就可以在批处理模式下运行测试了。
其他选项可以在文档中找到:C-h i m ert RET。
因为 Emacs 本身就是一个 elisp 翻译,你写的代码始终运行在它原生的执行环境中。你可以把光标放在表达式末尾按 C-x e 来求值任意一个表达式,也可以用 M-x eval-region 求值选中的区域,或者用 M-x eval-buffer 求值整个缓冲区。这在快速调试代码时非常有用。
既然你的代码和测试都是合法的 elisp,建议把练习代码和它的测试并排放进两个缓冲区窗格,就像这样:

用 C-x 3 把框架垂直分割,用 C-x o 切换到新窗口,再用 C-x C-f /path/to/file 打开文件。