Rspec on Autotest::Screen でテスト結果の表示がおかしいときの対処法

書いた人: noriaki 2007,08月18日(土) 21:05

ZenTest - autotestに同梱されているAutotest::Screenを使うと、Screenのステータスにテスト状況をリアルタイムに出せる。

ただ、ZenTest (3.6.0)のものは結果をうまく拾えていないようだったので少し書き換えてみた。

Autotest::Screenが便利な件について。 (SaikyoLine.jp)

Screenを導入したのならRspecで行っているテストのときにも便利になってほしいということで,上記のページを参考に.autotestを作ったのですが,私の環境では結果を上手く拾えなかったので対処療法的に書き直してみました.

環境

  • ZenTest-3.6.1
  • GNU Screen-4.0.2
  • Rspec(on Rails)-1.0.8

.autotest

追記:failとerrorの数を求めるロジックが間違っていましたので修正しました.
# Array#transposeなんて初めて使いました(笑)

Autotest::Screen.statusline = "%{=r dd} %-w%{=b dd}[%n] %t %{-}%+w %="

class Autotest::Screen
  Autotest.add_hook :run_command do |at|
    message 'Testing...' if execute?
  end

  Autotest.add_hook :ran_command do |at|
    if execute? then
      output = at.results.join
      failed = output.scan(/^\s*?\d+\)\n(?:.*? (FAILED)$|.*?(Error) )/)
      if failed.size == 0 then
        message "All Green", :green
      else
        f,e = failed.transpose.map{|e| e.compact}
        message "Red F:#{f.size} E:#{e.size}", :red
      end
    end
  end
end

変更点

$ diff .autotest.orign .autotest
--- .autotest.orign     2007-08-18 19:10:57.000000000 +0900
+++ .autotest   2007-08-18 20:39:41.000000000 +0900
@@ -54,12 +54,12 @@
   Autotest.add_hook :ran_command do |at|
     if execute? then
       output = at.results.join
-      failed = output.scan(/^\s+\d+\) (Failure|Error):\n(.*?)\((.*?)\)/)
+      failed = output.scan(/^\s*?\d+\)\n(?:.*? (FAILED)$|.*?(Error) )/)
       if failed.size == 0 then
         message "All Green", :green
       else
-        f,e = failed.partition { |s| s[0] =~ /Failure/ }
+        f,e = failed.transpose.map{|e| e.compact}
         message "Red F:#{f.size} E:#{e.size}", :red
       end
     end
   end

私の環境ではどうして動かなくなったのでしょうか.謎です. Rspec on Railsがなにか悪さをしてるのでしょうか.

なお,この対処法はかなりやっつけ仕事です.なので,エラーじゃないのにScreenが赤くなったり,エラーが出ているのにScreenは緑だったりする可能性がありますので,ご了承ください.

例えば,specファイルに以下のような記述があると結果にかかわらずエラー数が1増えてしまうと思います.

  it "should have 1 Error in 'hoge'." do

こちらはErrorという言葉をspecの説明文(?)のところに書かないことで回避できると思います.

このエントリをdel.icio.usにブックマークしているユーザ数このエントリをdel.icio.usに追加する
このエントリをはてなブックマークしているユーザ数このエントリをはてなブックマークに追加する
 | Tags , ,

コメント

このエントリはアーカイブされています。
コメントする場合は、お手数ですが「このページのURL」を記載した上で、新しいエントリにお願いします。