2011-10-04 4 views
90

In questo momento se corro la mia suite di test utilizzando rake spec ottengo un errore:Come ottenere rspec-2 per fornire la traccia completa associata a un errore di test?

 
1) SegmentsController GET 'index' should work 
    Failure/Error: get 'index' 
    undefined method `locale' for # 
    # ./spec/controllers/segments_controller_spec.rb:14: 
     in `block (3 levels) in ' 

Questo è normale come io ho un errore :)

Il problema è che la traccia non è molto utile . So che si è rotto in segments_controller_spec.rb, linea 14, ma questo è proprio dove io chiamo il test:

### segments_controller_spec.rb:14 
get 'index' 

io preferirei avere la rottura linea attuale e la traccia completa, non la parte nella cartella specifica.

L'esecuzione con --trace non è di aiuto.

+2

check http://spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering/ C'è un modo per cambiare impostazione predefinita backtrace RSpec filtraggio – Bohdan

+0

@ BohdanPohorilets Sembra che questo sia quello che sto cercando! Provalo ora. Ma perché lasciarlo come commento, dovresti lasciare una risposta ^^ – marcgg

+0

Non testato, non sono sicuro che funzioni. – Bohdan

risposta

234

È necessario eseguire rspec con -b possibilità di vedere backtrace completo

+0

Funziona e certamente l'opzione * più semplice * –

+0

Sì, -b è il modo più semplice per andare. +1 – codecraig

+8

Non capisco, né questa o la risposta accettata ti danno il backtrace più lontano dal tuo file spec. Oppure non funziona solo per me o_O –

29

Altro (più facile) alternativa è quella di modificare il file .rspec, e aggiungere l'opzione backtrace. Dovrebbe apparire un po 'come questo:

--colour 
--backtrace 

che vi darà il pieno backtrace. Spero che questo aiuti.

+0

Sì! questo è esattamente ciò di cui avevo bisogno. stack trace per l'errore effettivo non lo stack delle specifiche. – DiegoSalazar

+0

Credo che l'ortografia appropriata sia 'color'. Penso che se si scrive 'colour' potrebbe apparire uno scherzo Monty Python – WattsInABox

+2

Appropriato se si proviene dall'America. Nel Regno Unito scrivono colori, e le persone rspec sono così gentili da permetterle entrambe;) – nathanvda

2

Un altro approccio è quello di cancellare tutti i modelli di esclusione di backtrace in spec_helper.rb. Questa soluzione mi piace di più poiché sono in grado di mantenere tutte le impostazioni di RSpec in un'unica posizione e di liberare .rspec file o --backtrace in .travis.yml.

# spec_helper.rb 
RSpec.configure do |config| 
    config.backtrace_exclusion_patterns = [] 
end 
+0

Non sembra avere quell'opzione in rspec 2.x. –

0

più Una possibilità, quando tutto il resto fallisce è quello di aggiungere solo un blocco di salvataggio e stampare lo stack di provare o aggiungere una dichiarazione di leva obbligatorio lì e usare show-stack.

rescue Exception => e 
    puts "" 
    puts e.backtrace 
    puts "" 
+0

Questa è a volte l'opzione migliore. Assicurati di rimuoverlo una volta che funziona. Dovrebbe avvolgere il posto in cui ti aspetti che l'errore sia. Magari inserire il blocco 'begin' e' rescue' come istruzione esterna del metodo di azione del controller. O usa 'rescue_from'. –

+1

@bat si questo è un ultimo tentativo e come @bat ha detto che deve essere rimosso una volta capito. Ricordati sempre di fare il tuo 'git diff' prima di commetterlo salverà il tuo bacon. –

0

Non so come visualizzare l'errore del controller in rspec. A volte si presenta ma non so quali condizioni lo facciano apparire. Ecco un modo per vedere l'errore abbastanza velocemente però:

Aprire un'altra sessione di terminale ed eseguire:

tail -f log/test.log 

Poi torna alla sessione di terminale ed eseguire solo le specifiche che ha avuto l'errore:

bin/rspec -b spec/requests/posts/index_spec.rb 

Torna alla coda del log e dovresti vedere l'errore, si spera senza troppe cose che lo circondano (perché hai eseguito da solo il test negativo).

3

Ciò funzionerà anche:

# rails_helper.rb 
RSpec.configure do |config| 
    config.full_backtrace = true 
end 
Problemi correlati