--- layout: old_post title: Railsのテスト環境を改めて- MacOSX / RSpec / ZenTest / Growl permalink: /tatsuya/show/361-rails-macosx-rspec-zentest-growl ---

Picture 2

最近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" の背景色を緑に変更してみた

Picture 2

なんか微妙?まあこれでいいや。満足、満足:)