はじめに
Vim で Rails でのアプリ開発をしているときに、RSpec でモデルのテストを回す、というようなケースがあると思います。
今までは tmux で別ペインにターミナルを立てて、該当の spec を直接コマンド実行していたのですが、なかなか面倒でした。
そんな中、vim-rspecという Vim プラグインが非常に便利だったので、紹介します。
vim-rspec とは
vim-rspecとは、Vim 上で動作する軽量の RSpec ランナーです。
よく使うキーマップを設定しておくことで、Vim 上で Rspec を実行することが出来ます。
使い方
インストール
まず、vim-rspec をインストールします。(以下は dein.vim でのインストール例です)
call dein#add('thoughtbot/vim-rspec')
キーマップ設定
次に、それぞれの関数を実行するキーマップを設定します。
" RSpec.vim mappings
map <Leader>t:call RunCurrentSpecFile()<CR>
map <Leader>s :call RunNearestSpec()<CR>
map <Leader>l:call RunLastSpec()<CR>
map <Leader>a:call RunAllSpecs()<CR>
それぞれの関数の概要は以下の通りです。
関数 | 概要 |
---|---|
RunCurrentSpecFile() | 現在開いている spec ファイル全体を実行 |
RunNearestSpec() | 現在開いている spec ファイルのカーソルに一番近いブロックの spec を実行 |
RunLastSpec() | 前回実行した spec を実行 |
RunAllSpecs() | プロジェクトのすべての spec を実行 |
実行コマンド設定
次に、実際に実行するコマンドを設定します。
letg:rspec_command="!bin/rspec {spec}"
{spec}
内に実際に実行する spec ファイル名が入ります。外部コマンドを実行するので、最初に!
をつけます。
僕の場合は、spring-commands-rspecを使っていたので、bin/rspec
としています。
実行
上記設定後、編集中の spec ファイル上で例えば <Leader>t
実行すると、その RSpec ファイルを実行し、Quickfix ウインドウ上で結果を表示してくれます。
vim-dispatch で更に便利に
tmux などの仮想ターミナルを使っている方は、vim-dispatchと組み合わせると更に便利かもしれません。
vim-dispatch は tmux、screen、iTerm、Windows などの仮想ターミナル上で、非同期にテストやコンパイルを実行できるプラグインです。
利用イメージは作者の動画を見るのがわかりやすいです。
使い方としては、まずvim-dispatch をインストールし、
call dein#add('thoughtbot/vim-rspec')
rspec を以下のように修正するだけで OK です。
letg:rspec_command="Dispatch bin/rspec {spec}"
この設定で RSpec を実行すると、tmux であれば別ペインを開き、非同期で spec を実行してくれます。実行中も Vim 上で操作ができるので便利です。
おわりに
こちらで 開発中何度も RSpec を実行するのが非常に楽になりました。よかったら試してみてください。
他の使い方は vim-rspec の READMEを読むと良いと思います。