vimで編集中のrubyテストを実行できるプラグイン

vimrubyのテストを編集しているとき、テストメソッドごとに結果を確認しながら書き進めたいことなどないでしょうか。
ruby test/unit/hoge.rb -n test_fuga でテストメソッド単位の実行はできるけど、テストケース名が長かったりするとかなり面倒・・・


ところが、そんな悩みを解消してくれる子に出会いました。
GitHub - janx/vim-rubytest: Run ruby test in vim
vimで編集中のテストをその場で実行できるプラグインです。

install
$ git clone git://github.com/janx/vim-rubytest.git

で落として、 plugin/rubytest.vim を ~/.vim/ に配置するだけです。
(READMEには 'Copy all files to your ~/.vim directory.' とありますが、こちらの方法ではできませんでした)
ちなみにvimのバージョンは7.2でした。

usage

vimでの編集中にコマンドを打つとテストが実行されます。

  • t (\t) すると、カーソルの乗っているテストケースを実行
  • T (\T) すると、そのスクリプト内の全テストケースを実行


注意点としては、

  • 実行中はvimのウィンドウからシェルに切り替わってしまう
  • テストケース単体実行と言っても、テストケース名の部分一致で見ている
    • test_fuga と test_fugafuga があって test_fuga 上で t した場合、test_fuga と test_fugafuga の両者が実行される
    • 要は、 ruby test/unit/hoge.rb -n /test_fuga/ が実行されるということ


ていうか、 -n /test_xxx/ で部分一致指定ができたのですね・・・知らなんだ・・・後方一致もできましたし。

完全一致にしたい場合は、~/.vimrc でカスタマイズしてやりましょう。

let g:rubytest_cmd_testcase = "ruby %p -n %c"


さよなら -n オプション!

    • -


はてブコメント見てたら、quickrun.vimというのもあるんですね。
スクリプト単位の実行なら、シェルに切り替わらないこちらが便利かもです。


参考:http://vim-users.jp/2009/05/hack7/


コメントありがとうございます!

    • -


さらに追記。
本日ずっとコケ続けていたscreenのインストールに成功したので、コードとテスト結果が同画面で閲覧でき便利になりました。

    • -


2011/08/22
さらにさらに追記。


railsのテストでrubytestを使っていたところ、次のエラーが出てテストが実行できない不具合に遭遇しました。

:!echo 'ruby integration/hogehoge_test.rb' && cd test && ruby integration/hogehoge_test.rb
ruby integration/hogehoge_test.rb
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- lib/piyopiyo (MissingSourceFile)
   ・
   ・
   ・

テストコード中で require 'lib/piyopiyo' しているところで、そんなのいないよと怒られる。でも実際にはいる。
rakeや、コンソールからの ruby test/integration/hogehoge_test.rb 実行なら落ちない。


よく見ると、rubytestが cd test してからテストを実行しているのがわかります。
rubytestのソースを確認すると、確かに cd しているところがありました。


自分の環境では cd しなくても不都合はないため、次のようにパッチをあてました。(リビジョンはこちら)

[admin@localhost plugin]$ diff ~/.vim/plugin/rubytest.vim.orig ~/.vim/plugin/rubytest.vim
64,67c64,69
<     if @% =~ '^test'
<       let cmd = substitute(cmd, '%p', s:EscapeBackSlash(strpart(@%,5)), '')
<       exe "!echo '" . cmd . "' && cd test && " . cmd
<     else
---
> 
>     " fix bug 'no such file to load', due to missing load path.
>     "if @% =~ '^test'
>     "  let cmd = substitute(cmd, '%p', s:EscapeBackSlash(strpart(@%,5)), '')
>     "  exe "!echo '" . cmd . "' && cd test && " . cmd
>     "else
70c72
<     end
---
>     "end


なお、ソースが新しければこの不具合は起こらないと思います。
おそらくこれ以前のものが該当するのでは、と。


アップデートしましょという話かもしれないガ━━(;゚Д゚)━━ン!!