てみたの不思議空間【後ろ】

フィーリングで感じたことを書く

WindowsでRspecでautotestする

Rubyでの話。やっぱり保存したら自動でテストを行ってくれて画面隅に結果を出したいよね。
ということです。今回は参考が少なくて戸惑いどころも多いWindowsでやってみたいと思います。
テストって面倒ですよね。

みどころ

Windows環境
rspecの導入
自動でテスト
画面端ポップアップ表示
たぶん他の環境でも動く

導入

使用ライブラリ
  • gem install rspec
    • これはテストに必要
  • gem install ZenTest
    • これはautotestに必要
  • gem install autotest-growl
    • これはポップアップするのに使うが無くてもいい

準備

テスト前に準備作業を強いられているんだ!(集中線)

Growlの準備

ポップアップ表示だけのソフトウェアです。
これがあるとツイッター風にテストを表示できます。
GrowlforWindows
からダウンロードしてsetup.exeを実行してください。いらないなら飛ばしてもおkです。

Rspecの準備と実行

Rspecを使う為にはテストファイルを作る必要がある。
foo.rb でファイルを作っているならば、foo_spec.rb というテストファイルを作る。
では手動で実行。rspecで検索をかければ foo_spec.rb の書き方は分かると思う。
こことか参考に
慣れていなければ、同じフォルダに一緒だと失敗しにくい。かも。

PS P:\kusoge\myProject> rspec .
〜〜〜〜
Finished in 0.038 seconds
2 examples, 1 failure

Failed examples:

rspec ./spec/foo_spec.rb:10 # Main test arue

Finished in 0.038 seconds
2 examples, 1 failure
あらら、2個実行して1個テスト失敗してますね。成功です。

autotestの準備

次にautotestでファイルを書き換えるたびに自動でテストを実行します。
自動テストは当然先程のRspecのテストを使ってくれないと困ります。
まず、.autotest という自動実行の設定ファイルを作ります。

in MyProject/.autotest

# -*- ruby -*-
# require 'autotest/autoupdate'
# require 'autotest/bundler'
# require 'autotest/isolate'
# require 'autotest/once'
# require 'autotest/rcov'
# require 'autotest/restart'
# require 'autotest/timestamp'
require 'autotest/growl' #ポップアップしたいなら必要

# Autotest::AutoUpdate.sleep_time = o
# Autotest::AutoUpdate.update_cmd = o
# Autotest::Isolate.dir = o
# Autotest::RCov.command = o
# Autotest::RCov.pattern = o
# Autotest::RCov.options = o

Autotest.add_discovery do
"rspec"
end

Autotest.add_hook :initialize do |at|
at.add_mapping(/([\w0-9]+)\.rb$/) do |f, matched|
"#{matched[1]}_spec.rb"
end
end

使いたいプラグインをここで決めるらしいです。
add_hookでは _spec.rb ファイルをすべてテスト実行させると書いてます。

自動実行

さぁ自動実行ですよ。ここでWindowsでは注意が必要です。
ちょっと前では
autospecとかいう機能があったのですが廃止されました。
なのでautotestにRspecテストだということを教える必要があります。

linuxではautoテストで実行する前には

RSPEC=true autotest

とかでも出来たのですが、Windowsでは

autotest --style rspec2

でうまく動きます。

まとめ?

ファイルを書き換えるたびに自動でテストしてポップアップ表示ができる?。
テストってこんなに簡単?。
使用ライブラリはgemとGrowlなので、少し書き換えたら他の環境でも動きます?。
なにか足りてない気がするけど、気にしない。