Java & Eclipseの開発環境には、Quick JUnitというテストを迅速に実行するプラグインがあります。
Ruby & vimの開発環境においても、ほぼ同等の事が実施可能です。
以前、私のブログで、プロダクションコードとテストコードを素早く切り替えるテクニック、
vimから即座にRSpecを実行し、結果をバッファに表示するテクニックを紹介しました。
詳細は、以下を参照してみてください。
RubyでTDDをやる際に、ちょっと便利になるVimの設定 - joker1007の日記
rspecをvim-quickrunから非同期で実行する - joker1007の日記
今回は、そこから一歩進めて、特定のテストケースだけをvim-quickrunから実行する設定を紹介します。
そもそもrspecには -l
オプションを付けることで、特定の行だけテストを実施してくれる機能があります。
指定した行が、it/specify
ブロックの中ならそのケースのみ、describe/context
ブロックなら、そのテストケースグループのみを実行してくれます。
つまり、vimのカーソル行を取得してrspecのオプションに渡せばオッケーです。
設定例
" quickrunの出力結果にAnsiEscを実行して色付けする
autocmd FileType quickrun AnsiEsc
" quickrunの実行モジュールをvimprocに設定する
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc'}
" rspecを実行するための設定を定義する
" %cはcommandに設定した値に置換される
" %oはcmdoptに設定した値に置換される
" %sはソースファイル名に置換される
let g:quickrun_config['rspec/bundle'] = {
\ 'type': 'rspec/bundle',
\ 'command': 'rspec',
\ 'outputter': 'buffered:target=buffer',
\ 'exec': 'bundle exec %c %o --color --drb --tty %s'
\}
let g:quickrun_config['rspec/normal'] = {
\ 'type': 'rspec/normal',
\ 'command': 'rspec',
\ 'outputter': 'buffered:target=buffer',
\ 'exec': '%c %o --color --drb --tty %s'
\}
" :QuickRunで実行されるコマンドをrspec用の定義に設定する
" <Leader>lrをタイプした時に、:QuickRun -cmdopt "-l (カーソル行)"を実行するキーマップを定義する ← これがポイント
function! RSpecQuickrun()
let b:quickrun_config = {'type' : 'rspec/bundle'}
nnoremap <expr><silent> <Leader>lr "<Esc>:QuickRun -cmdopt \"-l " . line(".") . "\"<CR>"
endfunction
" ファイル名が_spec.rbで終わるファイルを読み込んだ時に上記の設定を自動で読み込む
autocmd BufReadPost *_spec.rb call RSpecQuickrun()
実行結果
まとめ
特定のケースだけ素早くテストを実行することで、
今フォーカスしていないテストの終了を待つ必要がなくなり、
よりスピーディにTDDが行えると思います。
Rubyのテスト環境については、okitanさんによる テストの自動実行あれこれ #Ruby #開発環境 #AdventCalendar - Qiita も参照してみてください。
おまけ
Rubyに限りませんが、dotfiles(設定ファイル)はある程度まとめて、githubで管理しておくと便利です。
私のdotfilesはこんな感じです。
(一部放置されてますが・・・)