EmacsからRubyのTest::Unitのテストを実行する

経緯

rubyunitからの流れでRubyのテストフレームワークはずっとTest::Unitおよびその互換I/Fを使っている。実は流行りのRspecは使い方を知らなかったりする。

探し方がよくないのかEmacsとTest::Unitを連携させる既存のパッケージが見つからなかったので、Emacsのバッファから適当にTest::Unitを実行するemacs-lispを書いて使っていたが、正月で時間があるのでブラッシュアップしてみた。

方針

  • Emacscompilation-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に登録した。

github.com