ZenTestのautotestにハマる
RubyForgeのRSSに捕捉しながらも全然見る気がなかったZenTest.触ってみると,ちょっと素敵だったという話.
二重の意味でハマった.
- 何これ,すげーカッケーやん
- 何これ,autotest動かんやん
なんというか,プロジェクトそのものが2004年頃には既にあった事を思うと,俺チョット遅れ過ぎじゃねーか.
カッコいいところ
これは,Railsとかで使うとすげー効果的なんですね.ZenTestを全く知らない人のためにさらっと説明しておくと,$RAILS_ROOTに".autotest"という名前の空っぽのファイルを作って置いておき,$RAILS_ROOTでautotestを実行すると,アプリケーションやテストケースの更新を捕捉して,該当部分だけを,その名の通り自動でテストを実行してくれるというスグレモノ.
これは嫌でもTDDが加速しますね.
動かない感じ
railsでやるときは上の方法ですんなり動いたんですが,railsの全く関係無いところでやると,ちょっと難儀だった.これは何と言うか,ボクの認識が甘すぎる.
例えば,こういう内容のスクリプトを実行する.
puts Dir.pwd.split(/\//).last # カレントディレクトリの名前 => % pwd /Users/kenji/ruby % ruby tmp/piyo.rb ruby
ボクは,スクリプトのカレントディレクトリの名前であるtmpって出て欲しいわけだけど,帰ってきたのはrubyインタプリタを実行したカレントディレクトリの名前であるruby.これがどのようにautotestに影響するかというと,
- autotestを行うためには,以下の階層構造が必要
- lib/*.rb
- test/test_*.rb
- と言う事は,テストケースに以下のようなrequire文を追加しなければならない
require '../lib/application.rb'
- テストケース単体で実行するためには,コレで良い
- これのお陰で変に躓いたのだ
- しかし,autotestはlib,testの上のディレクトリで行わなければならない
- よって,テストケースのrequire文は以下の様に変更しなければならない
require 'lib/application.rb'
- これで幸せ
この原理だと,単体テストを行いたいときは,ruby test/test_application.rbでいけるよね.
なんか最近変な事でハマるなー.ほんと,もう一回勉強し直すべきだよね….
何はともあれ
これはすごく便利.id:secondlifeさんの記事や瀧内さんの記事を読む限り,使いこなすと,もっとすごいことが起こるっぽい.rakeがRailsに於けるTDDの全てじゃないんだな,と最近すごく実感する.