2008年12月17日水曜日

RSpec+autotest+Snarl その2

せっかく作った環境を壊してしまった。(ボーっとして全削除した^^;)
よって再度作り直したところ、autotestが反応しなくなった。
んで、調査した結果、
どうも最新のrspec-railsではTest::UnitとRSpecのautotestを
任意に使い分けができる模様。

Test::Unit

普通に autotest で実行

RSpec

script/autospec で実行


これがわからなかった。
autotestで動かしてたから、いくらspecテスト書いても動かないわけだ。

2008年12月16日火曜日

ソフトウェア開発技術者試験

最後のソフトウェア開発技術者試験。(来年から制度が変わるため)
無事、合格できた。
午前、午後Ⅰが不安だったけど、

  • 午前:685

  • 午後Ⅰ:635

  • 午後Ⅱ:700


と、結構安全圏だった。
やっと高度情報処理受けれる。

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 の設定


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

2008年12月9日火曜日

Ruby でハマッタこと

プライベートでイロイロあって投稿がご無沙汰してきた。
今日、Rubyやっててハマッタことを記録。

irb -Ks にて、

a=%w(1 2 3 4 5)
a.sort {|a, b| b<=>a }
puts a

実行すると、なんと
=>[5, 4, 3, 2, 1]
a=>1

a=1?
配列なのに、なぜ?
a.classするとFixnumになってるし。。。

答えは単純。
配列名とブロック引数名が重複しているためでした。
変数名を変えてやれば正しく動きました。
マイッタ。