Hatena::Groupsubtech

#生存戦略 、それは

-> 06 { 11 / 07 }

autotest でしょでしょ?

00:20 | はてなブックマーク - autotest でしょでしょ? - #生存戦略 、それは

ZenTest に含まれる autotest だが、rails + autotest の方法以外さっぱり解らなかったのでソース読んだ。

で、autotest は カレントディレクトリの .autotest もしくは ~/.autotest があったら読み込む事が解った。んでそこで様々なところに hook かけるプラグインなどをロードできる。例えば require 'autotest/html_report' とか。詳しくは example_dot_autotest.rb を。

また、rails じゃない場合、自動で lib/*.rb と test/test_*.rb をみてくれて実行してくれる。で、これは後者がくせ者で、普通 test/test_*.rb という名前にはせずに、test/*_test.rb とテスト名はつける(ハズ)。なので .autoload を起動時に読み込むことを利用し、quick hack して .autoload に↓の書いておくと、test/*_test.rb も autotest 対象に入ってウマー、と。これでライブラリテストも autotest れるように><。あと autotest -h 見ると解るけど、各種バージョン管理システムを定期的にアップデート(svn up とか)してくれる機能もついており、共同で開発してるときに便利かもしれない。

class Autotest
  alias __tests_for_file tests_for_file
  def tests_for_file(filename)
    case filename
    when /^lib\/.*\.rb$/ then
      impl = File.basename(filename).gsub '_', '_?'
      @files.keys.select do |k|
        k =~ %r%^test/.*#{impl}$%
      end
    when /^test\/.*_test\.rb$/ then
      [filename]
    else
      @output.puts "Dunno! #{filename}" if $TESTING
      []
    end
  end
end

yzatkatamayuyzatkatamayu2006/11/22 08:14これだとlib/*.rbを更新したときにtest/*_test.rbが実行されないので、
impl = File.basename(filename).gsub('_', '_?').sub(/\.rb$/, '')
@files.keys.select do |k|
k =~ %r%^test/#{impl}_test.rb$%
end
ですね。

secondlifesecondlife2006/11/22 11:23どもども、たしかに…。
ありがとうございます。

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20061107