ok kinoco

先日TDD Boot Camp Tokyo 1.6に参加してきた。参加記事はまたいずれ。

同僚と一緒に参加したらすっかり熱が上がってしまい、翌週「社内TDDBC」なんてのを開催してしまった。この記事も近いうちに。

ということで最近テスト方面が盛り上がっているのだが、TDDBCにautotestの準備が間に合わなかったのが悔やまれる。社内TDDBCでは使っているペアがいたので、悔しくなって急遽セットアップしてみた。

まずはコマンドラインで

必要なrubygemsのインストール
% gem install rspec
 % gem install ZenTest
 % rspec --version #=> 2.6.4
ディレクトリ構成
kvs/
|-- autotest
|   `-- discover.rb
|-- kvs.rb
`-- spec
    `-- kvs_spec.rb

実装クラスがkvs.rb、テストコードがspec/kvs_spec.rb。

autotest/discover.tb
Autotest.add_discovery { "rspec2" }
実行してみる

プロジェクトのルートで

% autotest

これでテストファイルの変更を監視している状態。kvs_spec.rbに変更を加えるとテストが実行される。kvs.rbは特に監視していない。

Growlで通知

Macで開発しているので、テストの結果をGrowlに通知してくれると楽しい。

必要なソフトウェアのインストール

セットアップはこちらを参考にした。

% gem install ruby-growl
% gem install redgreen
% brew install growlnotify
通知画像の取得

97きのこ本のイラストを書かれた@mayucoさんの素材を使わせていただくことにした。

% mdkir ~/.autotest.d/
% cd ~/.autotest.d/
% wget http://cocooooooon.com/kinotan/rails_ok.png
% wget http://cocooooooon.com/kinotan/rails_fail.png
% wget http://cocooooooon.com/kinotan/rails_pending.png
~/.autotest

autotestの結果を受け取ってgrowlに流すのは、~/.autotestで行う。

中身はこちらこちらを参考に書いてみた。

一応全文を書いておくが、修正するかもなので参考にされる際はGitHubをご覧いただきたい。

# -*- ruby -*-
module Autotest::Growl
  def self.growl title, msg, img="~/.autotest.d/rails_ok.png", pri=0, sticky=""
    msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
    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+pendings?)?/)
    if output
      if $~[1].to_i > 0
        growl "Tests Failed", "#{output}", "~/.autotest.d/rails_fail.png", 2
      else
        if $~[3].to_i > 0
          growl "Pending", "#{output}", "~/.autotest.d/rails_pending.png", 2
        else
          growl "Tests Passed", "#{output}", "~/.autotest.d/rails_ok.png", -2
        end
      end
    else
      growl "Tests Errored #{output}", "errors", "~/.autotest.d/rails_fail.png", 2
    end
  end
end

そういえばずいぶん前の勉強会(たぶんこれのA-4…かくたにさんとわださんじゃないか!)を見て、画面の下からredとかgreenがあがってくる光景(たぶんGrowlの「Music Video」)にえらく感動した記憶がある。3年も前に見たデモに今頃たどり着くなんて不勉強この上ないが、正しい道を進んでいることは確認できたような気がする。

autotest – GitHub

https://github.com/rspec/rspec/wiki/autotest

cocooooooon.com

http://cocooooooon.com/

Autospecを使ってRSpecのテストを自動化 with Growl – ほくの日記

http://d.hatena.ne.jp/hkj/20100810/p1

プログラマの覚書: RSpec+autotest+Snarl その1

http://kiyorin-net.blogspot.com/2008/12/rspec-zentest-autotest-snarl.html