2015-05-21 14 views
9

Der Abschnitt "Erweiterte Tipps" der Serverspec-Site zeigt ein Beispiel für das Testen mehrerer Hosts mit demselben Testset. Ich habe ein eigenes Beispiel gebaut (https://gist.github.com/neilhwatson/81249ad393800a76a8ad), aber es gibt Probleme.Testen mehrerer Hosts mit demselben Test unter Verwendung der Serverspezifikation

Das erste Problem besteht darin, dass die Tests beim ersten Fehler stoppen, anstatt durch das Los zu gehen und einen Zähler zu behalten. Die zweite besteht darin, dass die Fehlerausgabe nicht angibt, auf welchem ​​Host der Fehler aufgetreten ist. Was kann ich tun, um diese Probleme zu beheben und einen Abschlussbericht für alle Hosts zu erstellen?

Antwort

2

Für das erste Problem wird standardmäßig alle Ihre Tests ausführen. Da jedoch eine Schleife eine Rake Aufgabe für jede Umgebung ausführt, führt die erste Umgebung, die einen Fehler aufweist, dazu, dass die Aufgabe fehlschlägt, und daher wird eine Ausnahme ausgelöst, und der Rest Ihrer Aufgaben wird nicht ausgeführt.

Ich habe deinen Kern gegabelt und die Rake task to surround it with a begin/rescue aktualisiert.

... 
begin 
    desc "Run serverspec to #{host}" 
    RSpec::Core::RakeTask.new(host) do |t| 
    ENV['TARGET_HOST'] = host 
    t.pattern = "spec/base,cfengine3/*_spec.rb" 
    end 
rescue 
end 
... 

Für das zweite Problem, es sieht nicht so aus ServerSpec ausgibt, in welcher Umgebung die Tests ausgeführt werden. Aber da der aktualisierte Gist zeigt, dass der Host in den spec_helper.rb gesetzt wird, dass wir zu add an RSpec configuration verwenden können, richtet einen after(:each) ein und gibt nur host bei Fehlern aus. Die entsprechenden Code-Änderungen sind in einem fork of the gist, aber im Grunde brauchen Sie nur die unten stehende Snippet in Ihrem spec_helper.rb:

RSpec.configure do |c| 
    c.after(:each) do |example| 
    if example.exception 
     puts "Failed on #{host_run_on}" 
    end 
    end 
end 
+0

näher, aber ich kann immer noch nicht sagen, welchem ​​Host-Ausfall geschieht auf. Neues Stichwort: https://gist.github.com/neilhwatson/1d41c696102c01bbb87a –

+0

Ein neuer Fehler: 'example' ist nicht innerhalb eines Beispiels verfügbar (zB ein 'it'-Block) oder von Konstrukten, die im Rahmen eines Beispiels laufen (zB 'vorher',' lassen' usw.). Es ist nur in einer Beispielgruppe verfügbar (z. B. ein 'describe' oder' context' Block). –

+0

Ahh, mein Schlechter, das ist von RSpec 2, nicht RSpec 3. Es ist in RSpec 3 so gemacht: http://stackoverflow.com/a/26164289/238292. Ich werde die Antwort aktualisieren. –

Verwandte Themen