2013-02-18 7 views
11

Data la seguente configurazione RSpec (v2.12.0):Come forzare corsa tutte le specifiche RSpec ignorando: tag attenzione

RSpec.configure do |config| 
config.treat_symbols_as_metadata_keys_with_true_values = true 
config.filter_run :focus => true 
config.run_all_when_everything_filtered = true 
end 

volte la gente dimentica di rimuovere il tag :focus da specifiche e in un ambiente di integrazione continua dove abbiamo vuoi che vengano eseguite tutte le specifiche, vengono eseguite solo le specifiche con il tag :focus rimanente.

ho provato:

rspec --tag ~focus 

... che gestisce tutte le specifiche esclusi quelli contrassegnati con: concentriamoci

C'è un modo per forzare corsa TUTTI spec ignorando eventuali modifiche utilizzando il comando di RSpec opzioni di linea?

risposta

6

Si potrebbe rimuovere le linee:

config.filter_run :focus => true 
config.run_all_when_everything_filtered = true 

e dire agli utenti di eseguire i test focalizzati con rspec --tag focus. In questo modo l'IC gestirà sempre l'intera suite di test.

È possibile considerare di verificare l'ambiente nel blocco di configurazione e includere/escludere l'impostazione filter_run in modo appropriato.

Un'altra idea: se si utilizza git, impostare un hook di pre-commit per evitare che le specifiche con :focus si inseriscano nella base del codice in primo luogo.

+3

Utilizzo delle variabili d'ambiente sembrare una soluzione ragionevole, ad esempio: 'config.filter_run: messa a fuoco => true a meno che ENV ['CI'] ' – prashantrajan

+0

@prashantrajan non funzionerebbe per me. I nostri server Codeship eseguono i test prima della distribuzione in CI. Come previsto, eseguono test in ENV ['TEST'] –

9

Ho appena aggiunto ad un progetto di:

config.before :focused => true do 
    fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS'] 
end 

E nello script che il nostro server di integrazione continua corre:

export FORBID_FOCUSED_SPECS=true 
+0

Mi piace perché, a differenza di Rails.env.ci?, Può essere utilizzato dalle nostre esecuzioni di test Codeship che utilizzano l'ambiente di test. –

+0

Mi piace questa idea, ma preferirei forzare gli utenti a optare per questo comportamento (ad esempio "ENV ['ALLOW_FOCUSED_SPECS']'). In questo modo il comportamento predefinito è fallire se ci sono specifiche focalizzate. –

5

volevo fallire automaticamente sul nostro server di integrazione continua quando attenzione era impostato. Questo è stato riscritto basata su code da myronmarston per funzionare correttamente con RSpec-rails 3.2.0:

config.before(:example, :focus) do 
    fail 'This example was committed with `:focus` and should not have been' 
    end if ENV['CI'] 
5

Prova: rspec --tag focus --tag ~focus

+0

A prima vista sembra perfetto, ma con 'filter_run' questo ha lo stesso effetto di' rspec --tag ~ focus': - le specifiche focalizzate sono escluse. –

Problemi correlati