autotest-Notifications für rspec/cucumber 0

Posted by fwoeck
on Wednesday, June 10

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

Weblinks

  1. www.bitcetera.com/.../mac-friendly-autotest/
  2. www.bitcetera.com/.../autotest-fsevent
  3. github.com/svoop/autotest-growl
  4. github.com/svoop/autotest-fsevent

! mein Erster 0

Posted by fwoeck
on Sunday, December 21

autotest ohne Rails 0

Posted by fwoeck
on Saturday, December 20

Normalerweise erwartet ZenTest die Verwendung eines Frameworks wie Rails. Wie sieht’s mit einfachen Rubyprojekten aus?

Wenn man seine .rb-Files nach ./lib und seine Testfiles nach ./test kopiert, klappt’s. rSpecs müssten nach ./spec.

Beispiel:

  • lib/person.rb:
1
2
3
4
5
6
7
8
9
10
11
12
class Person
  attr_reader :name,:age, :year_born
  def initialize(name, age)
    @name=name
    @age=age
    @year_born = Time.now.year - age - 1
  end
  
  def days_alive
    @age * 365
  end
end
  • test/person_test.rb:
1
2
3
4
5
6
7
8
require 'person'

class TestPerson < Test::Unit::TestCase
  def test_simple
    assert_equal(1964, Person.new("Al",43).year_born)
    assert_equal(15695, Person.new("Al",43).days_alive)
  end
end

Konventionen

Für die Namen von Klassen und Files gelten folgende Regeln:

  1. Testfiles müssen in test/ liegen
  2. Testfilenamen müssen mit “test_” beginnen
  3. Testklassennamen müssen mit “Test” beginnen
  4. Die Implementierungen müssen in lib/ liegen
  5. Deren Filenamen müssen zu den Testfilenamen test_… passen

autotest-Meldungen in Ubuntu 0

Posted by fwoeck
on Saturday, December 20

autotest ist ein Bestandteil der ZenTest-Suite und läuft als Dienst, der beim Speichern von Programmteilen deren Testspezifikationen automatisch durchläuft und die Ergebnisse anzeigt,

Wenn man das Ergebnis grafisch im Desktop seiner Ubuntu-Umgebung sehen möchte, sind nur wenige Schritte nötig:

Installation

apt-get install libnotify-bin

gem install carlosbrando-autotest-notification

und als User:

an-install

Konfiguration

Dann benötigt man noch eine Konfiguration in ~/.autotest

require 'autotest_notification'
SPEAKING = false
DOOM_EDITION = false
BUUF = false
PENDING = false
STICKY = false

und schon läuft’s!