Die Anzeige von Notifications beim Lauf von autospec ist ein hübsches Extra, aber leider durch die unterschiedliche Einbindung in die verschiedenen Umgebungen (bei mir Ubuntu und OsX) ab und zu mit Fallstricken verbunden. Hier ist für beide Welten geschildert, wie’s bei mir läuft:
Ubuntu
Um unter Gnome oder Xfce4 die Ergebnisse ins Desktop einzublenden, benötigt man die libnotify-Bibliothek:
# apt-get install libnotify-bin libnotify1
Danach sollte dieser Test funktionieren:
$ notify-send Test "Testtest, 23..."
Um mit dem Notify-Dienst Kontakt aufzunehmen, müssen ein paar Hooks in die .autotest-Datei gesetzt werden – leider habe ich es bisher nicht hinbekommen, außer den rspec-Meldungen auch die cucumber-Meldungen anzeigen zu lassen. In der ~/.autotest:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
require 'autotest/timestamp' module Autotest::GnomeNotify def self.notify title, msg, img system "notify-send '#{title}' '#{msg}' -i #{img} -t 5000" end Autotest.add_hook :ran_command do |at| image_root = "~/.autotest_images" r = results = [at.results].flatten.join("\n") results.gsub!(/\\e\[\d+m/,'') output = results.slice(/(\d+)\sexamples?,\s(\d+)\sfailures?/) puts output.inspect if output if $~[2].to_i > 0 notify "FAIL", "#{output}", "#{image_root}/fail.png" else notify "Pass", "#{output}", "#{image_root}/pass.png" end else notify "FAIL", "You must have a non-rspec error in your code.\n Check the autotest log for details.", "#{image_root}/fail.png" end end end Autotest.add_hook :initialize do |at| at.add_exception %r%^\./tmp% at.add_exception %r%^\./log% at.add_exception %r%^\./db% end |
Insbesondere bei der Verwendung von sqlite-DBs, die unter ./db liegen, hat sich das explizite Ignorieren dieses Verzeichnisses als nötig erwiesen: autospec läuft sonst unaufhörlich, da beim Testlauf die Datenbankfiles geändert werden.
Mac
Die Kombination autotest-fsevent und autotest-growl von BitCetera ist sehr zu empfehlen. autotest-fsevent verwendet auf Leopard-Maschinen die FsEvent-Mechanik und entlastet so die CPU dadurch, dass nicht unaufhörlich nach Fileänderungen gesucht werden muss.
sudo gem install autotest-fsevent sudo gem install autotest-growl
~ > cat .autotest require 'autotest/growl' # fsevent als letztes(!): require 'autotest/fsevent'
Tip: ein eventuell zusätzlich vorhandenes ZenTest < 4.1.1 sollte man explizit deinstallieren. Dies killt i.d.R. auch die Binaries einer neueren Version, so dass danach in jedem Falle ein erneutes
gem install ZenTest
fällig ist.
Teststart
Bevor’s losgeht, sollte man noch folgende zwei Variablen in die Systemumgebung bringen (z.B. in der .bashrc):
AUTOFEATURE=true
RSPEC=true
Auf beiden Systemen wird der kontinuierliche jetzt Test so gestartet:
RAILS_ENV=test autospec 2>/dev/null
