25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby開発環境Advent Calendar 2012

Day 8

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

Last updated at Posted at 2012-12-26

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

25
25
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?