2010-09-03 2 views
5

Ho 30 specifiche nel mio foo_controller_spec.rb e quando eseguo l'intero file usando spec, ottengo 4 errori e 2 in attesa. Quando eseguo individualmente le 4 specifiche fallite, 3 di esse falliscono, ma una di queste passa. All'inizio ho pensato che fosse un problema di database, che i dati non venivano puliti correttamente tra le esecuzioni. Così ho installato database_cleaner (http://github.com/bmabey/database_cleaner) e aggiunto questo codice al mio spec_helper:specifica singola passa quando viene eseguito da solo, ma fallisce quando tutte le specifiche sono eseguite

config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.clean_with(:truncation) 
end 

config.before(:each) do 
    DatabaseCleaner.start 
    Sham.reset 
    login 
end 

config.after(:each) do 
    DatabaseCleaner.clean 
end 

Ora, quando eseguo le mie specifiche posso vedere che i tavoli sono troncati tra ogni spec quindi so che sta funzionando, ma le specifiche non riesce ancora quando viene eseguito con tutte le altre specifiche ma passa quando viene eseguito da solo. Cosa mi manca qui?

risposta

6

Ho avuto esattamente lo stesso problema ed ero uscendo di senno!

Ho rintracciato il problema in questo modo (con Textmate): selezionare i file nel cassetto progetto (più file) e quindi andare su "Pacchetti> Rspec> Esegui esempi in file/directory selezionati".

Il trucco è trovare il file che causa interferenze con gli altri.

Per me era la modifica di I18n.locale in un file che ha causato la modifica delle impostazioni internazionali per tutti gli altri esempi!

ho perso un paio d'ore impazzendo con questo ...

+0

Bella correzione! Ho avuto lo stesso problema e ho scoperto che un "include Foo" al di fuori di qualsiasi blocco descrittivo stava rendendo disponibili quei metodi a tutte le specifiche. Questo ha mascherato un errore durante l'esecuzione della suite nel suo complesso. – r00k

+1

come posso testare questo con Sublime Text e il mio terminale? – Ricbermo

1

Solo nel caso che aiuta gli altri: ho avuto un problema simile e scoperto di avere

  • Rspec.configures randagi che sono stati imperativi per tutte le prove su tutta la linea
  • WebMocks abilitati in un test che sembrano cascata a seguire il test fino a che non ho incluso nel spec_helper così i collegamenti erano di default

    R Spec.configure do | config | config.before (: suite) do WebMock.allow_net_connect!

+0

Anch'io stavo affrontando lo stesso problema @ Ben, felice che tu abbia postato. –

0

Ho avuto un problema simile oggi che ha richiesto un po 'di tempo per risolvere.

questo non funziona:

module SomeModule 
    describe SomeController do 
    it 'does something' 
    end 
end 

Questo passa:

describe SomeModule::SomeController do 
    it 'does something' 
end 

La questione ha a che fare con scoping.