Help us understand the problem. What is going on with this article?

RubyとvimでQuick JUnit風にテスト実行

More than 5 years have passed since last update.

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のオプションに渡せばオッケーです。

設定例

.vimrc
" 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はこんな感じです。
(一部放置されてますが・・・)

joker1007/dotfiles - Github

repro
世界59か国6,500以上の導入実績を持つCE(カスタマーエンゲージメント)プラットフォーム「Repro(リプロ)」を提供
https://repro.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away