2015-05-21 14 views
9

La sezione Suggerimenti avanzati del sito Serverspec mostra un esempio di test di host multipli con lo stesso set di test. Ho creato un mio esempio (https://gist.github.com/neilhwatson/81249ad393800a76a8ad), ma ci sono problemi.Test di più host con lo stesso test utilizzando serverspec

Il primo problema è che i test si fermano al primo errore piuttosto che procedere attraverso il lotto e mantenere un conteggio. Il secondo è che l'output di errore non indica su quale host si è verificato l'errore. Cosa posso fare per risolvere questi problemi e produrre un rapporto finale per tutti gli host?

risposta

2

Per il primo numero, per impostazione predefinita, ServerSpec eseguirà tutti i test. Tuttavia, poiché si dispone di un ciclo che esegue un'attività Rake per ciascun ambiente, il primo ambiente in cui si verifica un errore causa il fallimento dell'attività e pertanto viene sollevata un'eccezione e il resto delle attività non viene eseguito.

Ho forked il tuo succo e aggiornato il Rake task to surround it with a begin/rescue.

... 
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 
... 

Per il secondo problema, non sembra ServerSpec emette quale ambiente i test sono in esecuzione. Ma dal momento che il Gist aggiornato mostra che l'host impostato nel spec_helper.rb possiamo usare quello per add an RSpec configuration che configura un after(:each) e genera solo gli errori host. Le modifiche al codice in questione sono in un fork of the gist, ma in fondo ti basta il frammento qui sotto nella tua 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

Più vicino, ma ancora non posso dire che cosa fallimento ospite accade su. Nuovo gist: https://gist.github.com/neilhwatson/1d41c696102c01bbb87a –

+0

Un nuovo errore: 'example' non è disponibile all'interno di un esempio (ad esempio un blocco' it') o da costrutti che vengono eseguiti nell'ambito di un esempio (es. 'prima',' let', ecc.). È disponibile solo su un gruppo di esempio (ad esempio un blocco 'describe' o' context'). –

+0

Ahh, il mio male, che è da RSpec 2, non RSpec 3. È fatto in questo modo in RSpec 3: http://stackoverflow.com/a/26164289/238292. Aggiornerò la risposta –