2018年以降の記事はGitHub Pagesに移行しました

ZenTestでRSpecを自動実行できるようにした

あらすじ

ZenTestを使えばテストを*specファイルを変更したタイミングで実行できるという事を知った。
ファイル編集する -> alt+tabでウィンドウ切り替える -> プロンプトでrspecコマンドうつ…の繰り返しとはなんだったのか……。

環境

手順

ZenTest導入

まずはZenTestをgemで導入……しようと思ったらgem自体のアップデートを要求された。

gem update --system

アップした後はgem 1.8.10となった。gemを最新にしたらZenTestを導入。

gem install ZenTest

次にソースファイルを用意。Growlで何かしら通知するファイルを作りたかったのでそんな感じの名前に。

growl_for_ruby
┣.autotest
┣autotest
┃┗discover.rb
┣growl.rb    # 実際にソースをゴリゴリ書いていく
┗spec
 ┗growl_spec.rb # テストコード
.autotest

これにはまだ何も書いていない。設定を書いていくらしい。

autotest/discover.rb

autotestコマンド実行時にautotestフォルダに入っているdiscover.rbを読みに行くようだ。中身は以下。

Autotest.add_discovery { "rspec2" }

autotestでrspec 2.Xを使うよってことかな。

spec/growl_spec.rb

テストコード。rspecの書き方にならってテストを書いていく。注意しないといけないのは、テストコードはspecフォルダ以下に入れないと読み込んでくれない。*1

テスト実行

一つ新しいプロンプトを開き、プロジェクトルートへ移動。そしてautotest実行。

$ autotest
loading autotest/rspec2
C:\ruby1.8\bin\ruby -rrubygems -S C:/ruby1.8/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/bin/rspec --tty 'C:/xx/growl_for_ruby/spec/growl_spec.rb'

成功すると待ち状態になり。以後はコードを保存する毎? にrspecコマンドが走ってくれる!

その他

どうもRubyのPATHにスペースが入っているとLoad Errorとなる様子。またお前か。ここでもデフォルトパスでインストールした弊害が……。

と、もう一つ。autotestの他にrspecにautospecというコマンドがあるらしく、こちらを叩いてもOK"だった"らしい。今は以下のようなメッセージが出る。訳は autospecと打ったら罵られてしまった件について - smellman's Broken Diary に記載されています。

************************************************************
REMOVAL NOTICE: you are using behaviour that has been
removed from rspec-2.

* The 'autospec' command is no longer supported.
* Please use 'autotest' insted.

This message will be removed from a future version of rspec.
************************************************************

今後の予定

  • 動作原理をもう少し調べる
  • rspecにオプションをつけて実行したい
  • テスト結果をGrowlで通知したい

*1:ただし、どこかの設定で場所は変えられると書いてあった気がする。