2008年12月16日火曜日

RSpec+autotest+Snarl その1

今話題の rails テスト環境。
Growl for Windows で本当はやりたかったけど、WebKit 系ポップアップが正しく表示されない(エラーが出る)ので、snarl に変更した際の備忘録。
参考) gan2 の Ruby 勉強日記

  • snarl

  • rspec

  • rspec-rails

  • autotest

  • win32console

  • ZenTest

  • diff-lcs

  • ruby-snarl

  • redgreen


は事前にインストールしておくこと。snarl以外はすべて gems でインストール可能。
.autotestのコードを以下のように。※ ファイルの作成方法は参考サイトを見てね。

# ruby -w
require 'rubygems'
require 'autotest/redgreen'
require 'autotest/snarl'
require 'win32/console/ansi'

Autotest::HOOKS.delete(:interrupt)
module Autotest::Snarl
def self.icon
{
:green => 'rails_ok.png',
:red => 'rails_fail.png',
:pending => 'rails_pending.png'
}
end

def self.snarl title, msg, img=nil
Snarl.show_message(title, msg, icon[img])
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+pending)?/)
if output =~ /[1-9]\sfailures?/
snarl "FAIL:", "#{output}", :red
elsif output =~ /[1-9]\spending?/
snarl "PENDING:", "#{output}", :pending
else
snarl "PASS:", "#{output}", :green
end
end
end

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

参考サイトと違う点(と、いうか色んなサイトを合わせた)を列挙すると、

require 'rubygems'
require 'win32/console/ansi'
Autotest::HOOKS.delete(:interrupt)
snarl "PENDING:", "#{output}", :pending
#Autotest.clear_hook

1.rubygemsでインストールしたので、gems宣言を追加。
2.win32consoleを追加しないと、Snarlに通知されなかった。
3.autotestがCTRL+C*2で停止しないため追加
4.pendingも表示(まだ試してないけど。。。)したかったので追加
5.CTRL+C*2で停止しないためコメント化

で、コマンドプロンプトで autotest を実行すれば
Snarl に通知が無事いきました。

後は、

  • rspec-rails と rspec プラグインの違い

  • ZenTest の設定


が分かり次第、エントリ登録しようと思う。

1 件のコメント:

きよりん さんのコメント...

判ったことを、
・ZenTest
Rubyのテストツール一式のこと。よって設定はautotestのみでとりあえず完了。が、どこかでソースからテストの雛形を作るみたいな記事をみたことが?
・rspec-rails
どうも、昔のplug-in版がgems化されたっぽい。インストールはgemsのみでOK。
・drb
dRuby の略。SOAPとかと同じと解釈(あってる?)