やってみた感想
TDDに関しては、言われた通りの事が実感できました。
たとえば、テストを書く時点でインターフェイスについて考えるとか。
ただ、絶望的な問題があった
テストを実行するのが面倒という点。
編集する→テスト(テストコマンドを実行)する、というのはまったくもって刺身たんぽぽな作業であり、DRYですらない。
で、以前からZenTest というのは聞いていたので、その環境を構築しておくべきだった、と痛感した。
なので、環境をつくってみたよ
autotest による RSpec の自動テストと、その結果を Growl に通知するように設定しました。
gemのインストール
- sudo gem install zentest
- sudo gem install ruby-growl(必要なのかよくしらない)
ちなみに、 ZenTestは 4.2.1 で、 ruby-growl は 1.0.1 です。
autotest の設定
まず、RSpec 厨のみなさんは export RSPEC=true をしてください。
これが無いと rspec のファイルを読み込んでくれません。
コマンドラインからで追加できたなら、お使いの .bashrc とかに記載しておくと良いです(これ、環境変数じゃなくて .autotest に書く方法ないんですかね?)。
(追記)
コメント欄で、id:ursmさんから助言頂きました。
autotest の代わりに autospec でテストを実行すると良いみたいです。ありがとうございます!
rspec 付属のコマンド "autospec" を使うといいです。
必要な環境変数をセットして autotest を起動してくれます。
(追記終わり)
そして、その次に自動でテストを実行してくれる autotest の設定ファイルを記載する。
基本的には雛形をコピーして編集していくことになる*1。
cp -ip /opt/local/lib/ruby/gems/1.8/gems/ZenTest-4.2.1/example_dot_autotest.rb ~/.autotest
僕は Growl に通知したいので追記しましたが、特に不要であれば追記する必要もない(はず)。
ここの設定を参考にしました(ちょっと改変したところもある)。
# -*- ruby -*- # require 'autotest/autoupdate' # require 'autotest/once' # require 'autotest/rcov' # require 'autotest/restart' # require 'autotest/timestamp' # Autotest::AutoUpdate.sleep_time = o# Autotest::AutoUpdate.update_cmd = o # Autotest::RCov.command = o # Autotest::RCov.pattern = o # ref.http://aerial.st/archive/2009/07/21/display-autospec-results-with-growl module Autotest::Growl def self.growl title, msg, img="~/.rails_ok.png", pri=0, sticky="" msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}" # autotestは使わないので、-nで指定するアプリケーション名はautospecで良いと思う # -Hで通知先のGrowlのあるホスト名を指定する system "growlnotify -n autotest -p #{pri} -m #{msg.inspect} #{title} #{sticky}" #system "growlnotify -n autospec -H localhost --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}" end Autotest.add_hook :ran_command do |at| results = at.results.last examples = results[/(\d+)\s+examples?/].to_i # テストの総数 failures = results[/(\d+)\s+failures?/].to_i # 失敗の数 errors = results[/(\d+)\s+errors?/].to_i # エラーの数 if examples >= 0 if failures > 0 || errors > 0 growl "Tests Failed", "#{examples} examples, #{failures} failures, and #{errors} errors", "~/.rails_fail.png", 2 else growl "Tests Passed", "#{examples} examples, #{failures} failures, and #{errors} errors", "~/.rails_ok.png", 0 end else growl "Tests Errored", "errors", "~/.rails_fail.png", 2 end end end
画像の部分はそのうちイカしたの見つけたらそれに変えるつもりw
Growl の設定
Growl はインストールされていると過程して、コマンドラインから growlnotify が使えるか確認してみる。
growlnotify -m "hoge" -t "title"
これででれば上記のままで作業は完了。ない場合は Growl から Growl の本体を一度DLして、
cd /Volumes/Growl-1.2/Extras/growlnotify
./install.sh
で、growlnotify をインストールしましょう。
これで準備はおk
autotest を実行すると、せっせとテストして、Growl で通知をしてくれます。
まだだ、まだ終わらんよ
これだけどツマラナイ。何がツマラナイかと言うと、Growl の見た目がつまらん。
なので、Growl の設定を変えていく。
TDD厨なら、OKなら緑だし、エラーだったら赤くしたいよね。
そー言う場合は、Growl のプライオリティの設定を変えると良い。
「システム環境設定」→Growlで管理画面を開く。
「表示オプション」のSmoke という欄で、プライオリティ別にGrowlの通知ウィンドウの文字色や背景色を変えることができる。
プライオリティの数値は -2 から 2 までの間で、2が緊急。
あとは、各アプリケーション毎の growl の設定を変えてあげれば良い。
実は、一度でも実行すると、こちらのリストに名前が入り、各アプリケーション毎の挙動を変えることができる。
今回は .autotest に追記した設定で autotest というアプリケーション名になっているので、こいつを選択する。
ここで autotest を選択して設定ボタンを押す。
通知ボタン(タブ?)を押して、「表示スタイル」を"Smoke"にしてみる。
こうすることで、テスト結果が Pass ならグリーン、NGなら レッドになる。これで勝つる!
これで準備は完了
あとは自分のゴーストの囁きのままにTDDすればおっけーです。
*1:が、全部コメントアウトの状態なのでイチから書いてもおk