Autotest, Growl und RSpec

Sep 2007
18

0 Kommentar(e)

Eingetragen von Martin Maciaszek

Ich hatte einen ähnlichen Artikel bereits in meinem anderen Blog darüber geschrieben. Doch hier ist es nochmal, damit alles an einem Ort zu finden ist, und weil ich in der Zwischenzeit auch einiges daran geändert habe.

Angenfangen hat es, als ich ein paar Wochen über diesen Artikel von John Nunemaker in meinem Feed-Reader gestolpert bin. Das war gleich doppelt interessant. Ich fand die Idee mit Growl supergeil. Und von autotest hatte ich bis dahin auch noch nie gehört. Autotest ist Teil des ZenTest-Gems und kann ganz einfach mit gem install ZenTest -y installiert werden. (Die meisten werden noch ein sudo davor schreiben müssen)

Nachdem ich meine erste ~/.autotest-Datei erstellt habe, ging das eigentliche Experimentieren erst richtig los. Ich war nicht der einzige, der über diesen Artikel gestolpert war, denn kurze Zeit später präsentierte Jamie Hill etwas ansehnlichere Icons. Das sah schon richtig gut aus. Zu guter Letzt machte mein Wechsel auf RSpec einige Änderungen notwendig. Meine derzeitige ~/.autotest-Datei sieht also so aus. (download)

require 'autotest/timestamp'

module Autotest::Growl

  IMAGE_ROOT = "~/Library/Autotest/Images" 

  def self.growl title, msg, img, pri=0, sticky="" 
    system "growlnotify -n autotest --image #{img} -p #{pri} -m '#{msg}' '#{title}' #{sticky}" 
  end

  def self.find_test_summary(test_results)
    test_summary = test_results.find {|result| result.include? "example"}.chomp
  end

  def self.display_test_summary(summary)
    examples, failures, pending = summary.split(', ')
    if failures.to_i > 0
      growl "Tests fehlgeschlagen", summary, "#{IMAGE_ROOT}/fail.png", 2
    elsif pending.to_i > 0
      growl "Tests stehen aus", summary, "#{IMAGE_ROOT}/pending.png", 1
    else
      growl "Tests bestanden", summary, "#{IMAGE_ROOT}/pass.png", 0
    end
  end

  Autotest.add_hook :ran_command do |at|
    unless at.results.empty?
      summary = find_test_summary(at.results)
      display_test_summary(summary)
    else # Irgendwas ging ganz furchtbar schief
      growl "Panik!", "Die Tests lieferten keine Ergebnisse!", "#{IMAGE_ROOT}/panic.png", 3
    end
  end
end

Ich habe die Smileys um einen vierten Panic-Smiley ergänzt, falls etwas ganz fürchterlich schief gehen sollte. Da ich autotest immer in Netbeans starte und die Netbeans-Konsole keine Farbcodes beherrscht, entferne ich in meinen Projekten in $PROJEKT/spec/spec.opts immer die Zeile mit --colour. Folglich habe ich es auch nicht für nötig befunden, diese Farbcodes in meiner ~/.autotest-Datei herauszufiltern. Wem die Growl-Nachrichten nicht bunt genug sind, und auch farbige Meldungen in der Konsole haben möchte, muß sich einen entsprechenden Filter selbst in seine ~/.autotest-Datei einbauen.