--- layout: old_post title: Railsのテスト環境を改めて- MacOSX / RSpec / ZenTest / Growl permalink: /tatsuya/show/361-rails-macosx-rspec-zentest-growl ---
最近Macの再インストールしてから開発環境が中途半端だったので、Railsのテスト環境を改めて整備、のメモ
1) Rails開発環境は入っている
2) RSpec入れる % sudo gem install rspec
3) ZenTest入れる % sudo gem install ZenTest
3) diff-lcs入れる % sudo gem install diff-lcs
4) 自分のRailsアプリのディレクトリへ移動 % cd /RAILS_ROOT/
5) rspec on rails入れる % sudo ruby script/plugin install svn://rubyforge.org/var/svn/rspec/tags/REL_1_0_5/rspec_on_rails
6) RSpec関係ファイルのセットアップ % ruby script/generate rspec
7) モデルのSpecを作ってみる % ruby script/generate rspec_model Book
→migrateをいじって rake migrate する
→spec/fixture/boks.yml 編集
recipe: id: 1 title: Railsレシピ
→spec/model/book_spec.rb 編集
require File.dirname(__FILE__) + '/../spec_helper' describe Book do fixtures :books before(:each) do recipe = books(:recipe) end it "タイトルが等しいこと" do @recipe.title.should eql "Railsレシピ" end end
8) チェック実行 % rake spec
→成功 % Finished in 0.506011 seconds
9) テスト用サーバを立ち上げっぱなしに、処理が早くなる % ruby script/spec_server
→spec/spec.opts を編集して --drb を追加(drbでテスト用サーバへ繋ぐ)
→rake spec
→Finished in 0.151492 seconds
10) ZenTestのAutoTestで自動テスト % autotest (ルートディレクトリで)
→book_spec.rbを編集 → 自動でチェックが走る
11) 見づらいのでRedGreenとGrowlを有効に
→cp /usr/local/lib/ruby/gems/1.8/gems/Zentest-*.*.*/example_dot_autotest.rb ~/.autotest
→~/.autotest を編集
require 'autotest/redgreen'
require 'autotest/growl'
の2行をコメントから外す。
12) Growlの表示をカスタム
この辺からはおまけで。http://wincent.com/knowledge-base/Setting_up_autotest_to_use_Growlここを参考に表示をカスタム
cd ~ wget http://blog.internautdesign.com/files/rails_fail.png wget http://blog.internautdesign.com/files/rails_ok.png mv rails_fail.png .rails_fail.png mv rails_ok.png .rails_ok.png
画像拾ってきて、~/.autotestを編集
module Autotest::Growl def self.growl title, msg, img="~/.rails_ok.png", pri=0, sticky="" system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}" end Autotest.add_hook :ran_command do |at| results = [at.results].flatten.join("\n") output = results.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+not implemented)?/) if output if $~[2].to_i > 0 growl "Test Results", "#{output}", "~/.rails_fail.png", 2 else growl "Test Results", "#{output}", "~/.rails_ok.png" end end end end
何故か2重にポップアップが表示されてうざいので、適当にクリアーした
class Autotest def self.clear_hook HOOKS[:red].clear HOOKS[:green].clear HOOKS[:all_good].clear end end Autotest.clear_hook
あとGrowlの設定でautotestを "smoke" 等のスタイルにして、"Emergency" の背景色を赤/"Normal" の背景色を緑に変更してみた
なんか微妙?まあこれでいいや。満足、満足:)