すがブロ

sugamasaoのhatenablogだよ

Ruby の開発環境として ZenTest(autotest)を入れた

この間 BPStudy#29 に参加してきました

そこで TDD とペアプロを行なってきました。

やってみた感想

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy