autotest,RSpec,Emacsで快適テスト環境をつくる(あとGrowlも)
前回RSpecを設定したので調子に乗ってautotestと連携させてみる。
autotestとRSpecを連携させると何がおいしいか?
・保存の度にテストが裏で走るので常にテストに通るコードを書ける。
・とにかくテストが癖になる。
・とにかくテストが好きになる。
下二つは個人的な感想ですけど、ほんとに楽しくテストができる。
なにはともあれ設定してみる
まずは毎度おなじみgemでZenTestをインストールする。(autotestはZenTestに含まれる)
sudo gem install ZenTest
インストールが終わったら、~/.autotestを作る。
さっきインストールしたZenTestに叩き台があるのでまずはそれをコピー
cp /Library/Ruby/Gems/1.8/gems/ZenTest-3.10.0/example_dot_autotest.rb ~/.autotest
そのままじゃあRSpecが動かなかったのでるびきちさんの設定をまねて.autotestにRSpecを使いための設定を書く(RSpecのバージョンは1.1.4です)
以下を.autotestの末尾につける。
Autotest.add_hook :initialize do |at| if defined? Autotest::Rspec def at.ruby "#{super} -I.:lib:spec" end end end
あとはテストコードとテストしたいコードを適切なディレクトリに配置する。
mkdir ~/www #←プロジェクトホーム?っぽいディレクトリ。なんでもいい mkdir ~/www/lib #←ソースコードディレクトリ mkdir ~/www/spec #←テストコードディレクトリ
wwwに移動してautotestを叩くと動くはず。
Emacsへの設定とGrowlでの通知
まずはautotest.elを落としてelispフォルダに入れる
wget http://www.emacswiki.org/cgi-bin/emacs/download/autotest.el
mv autotest.el ~/elisp/
続いてemacs.elに以下の設定を追加
(require 'autotest)
これでMx autotestを打つとEmacs上でautotestが動いてくれる。
最後に私の開発環境はMacなのでおなじみのGrowlで通知するように設定する。
ザリガニが見ていたさんを参考に設定
Growlをダウンロードして中に入っているGrowl.mpkgをインストール。
そのあとExtrasに入っているgrowlnotiryをインストール
cd /Volumes/Growl-1.1.4/Extras/growlnotify
./install.sh
つづいて.autotestのgrowlの設定箇所のコメントアウトを外す
require 'autotest/growl'
そのままだと成功=>成功と2回以上成功が続いた時には通知されないのでautotest/growlをid:willnetさんのZenTest,autotest,redgreen,growlでテストファーストのように書き換えてちょこっといじる。
# -*- ruby -*- module Autotest::Growl def self.growl title, msg, img="~/.rails_ok.png", pri=0 title += " in #{Dir.pwd}" msg += " at #{Time.now}" system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title}" end Autotest.add_hook :run do |at| growl "autotest running", "Started", "OK画像のパスに書き換える" end Autotest.add_hook :red do |at| growl "Tests Failed", "#{at.files_to_test.size} tests failed", "NG画像のパスに書き換える", 2 end #すべてのテストがすべて成功だったときにGrowlの通知を毎回だすようにしてみた # Autotest.add_hook :green do |at| # growl "Tests Passed", "Tests passed", "~/.rails_ok.png", -2 if at.tainted # end Autotest.add_hook :all_good do |at| # growl "Tests Passed", "All tests passed", "~/.rails_ok.png", -2 if at.tainted growl "Tests Passed", "All tests passed", "OK画像のパスに書き換える", -2 end end
これで保存の度にGrowlがテスト結果をすてきに通知してくれるようになった。
Growlで通知してくれるようになるとさらにテストが楽しくなった。