ExercismでEmacs Lispの演習をテストする方法を学びます
Elispのテストは、回帰テストや単体テストのためのEmacs LispライブラリであるERTを使って実行します。テストの実行方法はいくつかあります。
Emacsの中で対話的にテストを実行するには、次のようにします。
M-x eval-buffer RETを実行しますM-x ert RET test-name RETで、対話的に1つずつ実行します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でファイルを開きます。