mac で Growl な環境で、テスト環境を構築してみます。利用するライブラリは以前も紹介しましたが、rspec + rspec-rails + autotest(ZenTest) です。で、.autotest をこのように設定しました。これでテストの度にその結果を Growl で通知してくれるようになります。

require 'autotest/redgreen'
#require 'autotest/growl'

IMG_OK = '~/.autotest_icons/rails_ok.png'   # 成功時の画像
IMG_NG = '~/.autotest_icons/rails_fail.png' # 失敗時の画像
IMG_PD = '~/.autotest_icons/syatyou.jpg'    # 保留時の画像

#class Autotest
#  def self.clear_hook
#    HOOKS[:initialize].clear
#    HOOKS[:red].clear
#    HOOKS[:green].clear
#    HOOKS[:all_good].clear
#  end
#end
#
#Autotest.clear_hook

module Autotest::Growl
  def self.growl(title, msg, img, pri=0, sticky="")
    system "growlnotify -n autotest -m #{msg.inspect} -H localhost --image #{img} -p #{pri} #{title} #{sticky}"
  end

  #Autotest.add_hook :run_command do |at|
  #  growl "Autotest Start", "#{Time.now}", START, -2
  #end

  Autotest.add_hook :ran_command do |at|
    output = at.results.last.chomp!

    if output =~ /((?:\d+) examples?, (\d+) failures?(?:, (\d+) pendings?)?)/
      if $2.to_i > 0
        growl "Tests Failed", "#{$1}", IMG_NG, 2
      else
        if $3.to_i > 0
          growl "Pending", "#{$1}", IMG_PD, 1
        else
          growl "Tests Passed", "#{$1}", IMG_OK, -2
        end
      end
    else
    end
  end
end

全部のテストが通った場合には緑の Rails のアイコンを、一つでも失敗したテストがあれば赤い Rails のアイコンを、そして全部のテストが通ってるけど pending なテストがある場合には、この blog でも使っているアイコンを通知して早くテストを書くように訴えかけてみました。えぇ、特に深い意味はありません。

保留成功
失敗

かっこいいー(特に黄色)

ポイントは autotest/growl を require しないことです。最初はこれを require してたんですが、そうするとこのライブラリで指定されているフックポイントでも Growl が出てきて、わちゃわちゃになっちゃうので今回はコメントアウトしてます。全部のフックポイントを消すようにしてもいいと思いますが、面倒なので require しないようにして回避しました。

実際に利用する際の手順としては、Rails でプロジェクト作ったらこんな感じで全自動テスト環境の完成。以前書いたものとは一部変わっているので注意して下さい。

cd project_root
ruby script/generate rspec # rspec 用のファイル作成
spork --bootstrap # spork の bootstrap (for rspec)

# ここを参考に spec/spec_helper.rb を編集
# http://d.hatena.ne.jp/takuya6/20091108/1257692268

spork &
env RSPEC=true autotest
このエントリーをはてなブックマークに追加