EmacsからRubyのTest::Unitのテストを実行する
経緯
rubyunitからの流れでRubyのテストフレームワークはずっとTest::Unitおよびその互換I/Fを使っている。実は流行りのRspecは使い方を知らなかったりする。
探し方がよくないのかEmacsとTest::Unitを連携させる既存のパッケージが見つからなかったので、Emacsのバッファから適当にTest::Unitを実行するemacs-lispを書いて使っていたが、正月で時間があるのでブラッシュアップしてみた。
方針
- Emacsの
compilation-mode
でテストを実行する。C-c
C-c
((compile-goto-error)
)でエラーコードにジャンプできて便利。 - テスト、テストケース、テストファイル、テスト全体を個別に実行できるようにする。
- テストの個別実行はメソッド形式(
def test_~
)のみ対応。ブロック形式は対応しない、なぜなら自分が使ってないから。
コード
(require 'ruby-test-unit)
でロードするとruby-mode
で次の機能が使えるようになる。
C-c
.
現在のバッファのカーソル位置のテストを実行する。C-c
@
現在のバッファのカーソル位置のテストケース(Test::Unit::TestCase
を継承したクラス)を実行する。C-c
f
現在のバッファで開いているテストファイルを実行する。C-c
r
テスト全体(rake test
)を実行する。C-c
c
テストコード以外のバッファからテストを再実行する。実際は(compile)
を実行しているだけ。
カスタマイズ用の変数は次のとおり。
ruby-test-unit-ruby-command
Rubyを実行するコマンド。デフォルトは"bundle exec ruby"
。ruby-test-unit-rake-test-command
rake test
を実行するコマンド。デフォルトは"bundle exec rake test"
。ruby-test-unit-runner-options
Test::Unitのコマンドラインオプション。デフォルトはnil
。
2019/1/8 追記
コードをgithubに登録した。