2011-05-07 13 views
85

Ho una specifica di prova che è una classe describes e al suo interno sono presenti vari contexts ciascuno con vari blocchi it.Disabilita un gruppo di test in rspec?

C'è un modo per disabilitare temporaneamente un context?

Ho provato ad aggiungere una chiamata pending "temporarily disabled" nella parte superiore di uno context Voglio disattivare, e ho visto qualcosa su in sospeso quando ho eseguito la specifica ma poi ha continuato a eseguire il resto dei test.

Questo è ciò che tipo di fatto:

describe Something 
    context "some tests" do 
    it "should blah" do 
     true 
    end 
    end 

    context "some other tests" do 
    pending "temporarily disabled" 

    it "should do something destructive" do 
     blah 
    end 
    end 
end 

ma come ho detto solo continuato a eseguire i test sotto la chiamata in attesa.

La ricerca mi ha portato a questo mailing list thread in cui il creatore (?) Di rspec dice che è possibile in rspec 2, che sto eseguendo. Immagino che abbia funzionato, ma non ha avuto l'effetto desiderato di disabilitare tutti i seguenti test, che è quello che penso quando vedo una chiamata pending.

C'è un'alternativa o sto sbagliando?

risposta

132

per disabilitare un albero di specifiche utilizzando RSpec 3 è possibile:

before { skip } 
# or 
xdescribe 
# or 
xcontext 

È possibile aggiungere un messaggio con Skip che verrà visualizzato nell'output:

before { skip("Awaiting a fix in the gem") } 

con RSpec 2:

before { pending } 
+0

Come si fa esattamente su un blocco che ha: '' 'Descrivi 'XXXXX' fare .... fine''' –

+2

@ p.matsinopoulos Basta aggiungerlo alla riga seguente' Descrivi 'XXXXX' do '. Ha funzionato come un fascino, grazie @Pyro! – chesterbr

+0

Soluzione più semplice dei filtri, +1 – dolzenko

41

Utilizzare exclusion filters. da quella pagina: Nella tua spec_helper.rb (o rails_helper.rb)

RSpec.configure do |c| 
    c.filter_run_excluding :broken => true 
end 

nel test:

describe "group 1", :broken => true do 
    it "group 1 example 1" do 
    end 

    it "group 1 example 2" do 
    end 
end 

describe "group 2" do 
    it "group 2 example 1" do 
    end 
end 

quando corro "./spec/sample_spec.rb rspec --format doc"

Quindi l'output deve contenere "esempio 1 gruppo 1"

E l'output non deve contenere "gruppo 1 esempio 1"

E l'uscita non deve contenere "gruppo 1 Esempio 2"

+0

questo ha funzionato grazie –

8

un'altra. https://gist.github.com/1300152

utilizzare xdescribe, xcontext, xit per disabilitarlo.

Aggiornamento:

Dal RSpec 2.11, che include xit per impostazione predefinita.in modo che il nuovo codice sarà

# put into spec_helper.rb 
module RSpec 
    module Core 
    module DSL 
     def xdescribe(*args, &blk) 
     describe *args do 
      pending 
     end 
     end 

     alias xcontext xdescribe 
    end 
    end 
end 

Uso

# a_spec.rb 
xdescribe "padding" do 
    it "returns true" do 
    1.should == 1 
    end 
end 
+3

xdescribe non funziona – Chris

+0

aggiornato. prova il nuovo codice. – GutenYe

+0

Funziona! Grazie! –

3

Uso in attesa invece di descrivere. Se il blocco è:

context "some other tests" do 
    it "should do something destructive" do 
    blah 
    end 
end 

si può saltare l'intero blocco da:

pending "some other tests" do 
    it "should do something destructive" do 
    blah 
    end 
end 
+1

Questo non funziona per rspec 2.13.0 –

1
describe "GET /blah" do 

    before(:each) { pending "Feature to be implemented..." } 

    it { expect(page).to have_button("Submit") } 
    it { expect(page).to have_content("Blah") } 
end 
15

vedere cosa ne pensate di questo:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do 
    it "does something well" 
    it "rejects invalid input" 
end 

mi piace vedere ragioni con i miei articoli in sospeso quando disabilito qualcosa per "un po '". Servono come piccoli commenti/TOD che vengono presentati regolarmente piuttosto che sepolti in un commento o in un esempio/file escluso.

Cambiare it a pending o xit è rapido e semplice, ma preferisco la costruzione di hash. Ti dà documentazione di ogni tipo, è un drop-in (non cambia descrizione/context/it quindi devo decidere cosa usare in seguito), ed è altrettanto facilmente rimosso se la decisione è presa o il blocker è rimosso .

Questo funziona allo stesso modo per gruppi e singoli esempi.

+0

Inoltre non sono sicuro se funziona allo stesso modo per descrivere ma in questo caso il test è in esecuzione e fallisce se il test inizia a passare. Il xdescribe (credo proprio come xit) - semplicemente non lo esegue. –

0

Solo per spiegare cosa sta succedendo con il tuo codice. Includendolo dove si ha, viene semplicemente valutato (e quindi eseguito) quando il file viene caricato durante l'avvio. Tuttavia, è necessario che venga eseguito durante l'esecuzione dei test. Ecco perché le risposte hanno suggerito di inserire pending (RSpec 2) o skip (RSpec 3) in un blocco before.