RspecのテストをSublime Text上でやる
テスト駆動開発をするなら、テストが簡単に行える状態のほうがよいのだけれど、
テストを自動的に行うGuard用のgemを買う気になれなかったので、
sublime上で出来ないかなと思いつつ、そのまま読み進めていたらチュートリアルにSublime Text上で編集中のファイルに書かれているテストが実行出来ることが載ってたので、メモ。
Sublime Text 上でRailsのテストを行う
ヘルパーコマンドのインストール方法
ターミナルで以下のコマンドを入力する。
cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages
$ git clone https://github.com/maltize/sublime-text-2-ruby-tests.git RubyTest
ヘルパーコマンド
- Command-shift-R:今編集しているブロック内のテストを実行する。itブロック内のテストについては、そのテストを1回だけ、実行し、describeブロック内のテストはそのブロック内の一連のテストを実行する
- Command-shift-E:最後に実行したテストを再度実行する
- Commanfd-shift-T:現在のファイルにあるテストをすべて実行する
Command-shift-Rはテストしたい場所をクリックするだけでその周辺を実行範囲に選択してくれるので、めちゃくちゃすばらしい。
Rspecのオプションでもブロックが指定できたけれどターミナルでいちいちファイル名とブロックを入力するのと比べると、書いたテスト眺めながらクリックするだけで指定できるのでとても楽。
まだ、そんなにテスト書いてないけど。
なお、テストの実行結果は,エディタの下方に表示されます。
sporkとあわせてとても楽になりそう。
追記
Sublime Textを再起動してから、もう一度テストをヘルパーコマンドで実行しようとしたら
/bin/sh: rspec: command not found
[Finished in 0.0s with exit code 127]
と表示された場合。
この辺
ruby - RubyTest in Sublime Text 2 - Stack Overflow
Ruby on Rails: /bin/sh: rspec: command not found - Stack Overflow
を参考にして対処してみました。
原因は、
Sublime Text上で実行させたとき、間違ったディレクトリから相対パスを使ってしまっているからだそうです。
上のインストールするコマンド通りにやった直後など、特定のフォルダから開いている場合はよいみたいなのだけれど、
再起動した後などは(研究じゃあるまいし不具合が起きる状況なんて全部チェックしたくなry)
Sublime Text 2の相対パスを使ってファイルを探すときの、カレントディレクトリがずれてしまっているみたいで。
設定を変えるか、毎回起動場所を変えるか、らしいですが、
上でクローンしてきたSublime Textの設定ファイルをいじるのが簡単そうだったので、それでやってみました。
手順は以下の通り。また不具合が生じ次第修正します。
Rspecのpathを調べる
ターミナルでRailsプロジェクトの入っているディレクトリへ行って、
which rspec
を入力してrspecのpathを出します。
自分の場合は、
/Users/woshidan/.rbenv/shims/rspec
でした。
Sublime Text 2のPackage中の設定ファイルをいじる
~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime-settings
を開きます。
terminalに
cd ~/.config/sublime-text-2/Packages/RubyTest
または、
cd '/Users/userName/Library/Application Support/Sublime Text 2/Packages/RubyTest'
など、Sublime Text 2のパッケージの中のRubyTestディレクトリを開いてください。
Sublime Text 2インストール状況によって場所が異なる可能性があるので、
一番確実なのはメニューバーから
Sublime Text 2 > Preferences > Browse Packages
です。
で、RubyTest中のsublime-settingsファイルを開くと(環境によってはRubyTest.sublime-settingsのことも)
"check_for_rbenv": false,
"check_for_rvm": false,
"check_for_bundler": false,
"check_for_spring": false,
という部分があるので、ここをいじるみたいです。
which rspecの出力の中にrbenvとあった人は"check_for_rbenv"をtrueにするとヘルパーコマンドがまた動くようになります。
rvmとあった人は"check_for_rvm"をtrueに変更すると動くらしいですよ。