2012-08-28 4 views
12

Sono su Rails 3.2 e sto usando rspec (2.11.1). Quando eseguo la mia suite di test con "rake spec" ottengo errori. Quando lo eseguo con "rspec", tutto passa. Ho visto altre menzioni di questo problema ma nulla di definitivo che spiega cosa sta succedendo e quali sono le migliori pratiche.Devo usare "rake spec" o "rspec" (non riesco a far funzionare "rake spec")?

Se faccio "rake spec" o "rake tmp: clear & & rake spec" i miei test falliscono.

Se si esegue "rspec" o "specifica rspec" o "rake db: test: preparare & & rspec" i miei test passano.

Ho pensato che l'unica differenza era che il rake ha fatto "db: test: prepare" ma se lo faccio manualmente prima di eseguire rspec i miei test passano così che non può essere tutta la storia.

Dopo aver letto un po 'di lettura ho cambiato il mio Gemfile. Precedentemente l'avevo configurato come da "The RSpec Book" (p328) dove descriveva l'inserimento della gemma rspec all'interno di un blocco "group: development,: test". Dopo aver letto altri post SO ho rimosso ": development" e ho fatto un bundle. Ora "rake spec" non fa nulla. "rspec" funziona ancora come prima.

molto confuso ...

+3

fatto un altro sondaggio. con Gemfile come da rspec book (con: development,: test) running rspec usa l'ambiente 'test' mentre rake spec usa l'ambiente 'development'. Non sono sicuro adesso perché è così, ma continueremo a cercare ... – starfry

+3

"RAILS_ENV = 'test' rake spec" funziona. Mi sarei aspettato che i test fossero predefiniti nell'ambiente di test senza che io dovessi essere specifico ... – starfry

+0

La mia risposta è stata cancellata (per gentile concessione di @ bhargav-rao) come duplicata di http://stackoverflow.com/questions/15701298/rspec -spec-rake-spec-gives-different-result/41877864 # 41877864 –

risposta

9

provare a eseguire RAILS_ENV=test rake spec

+0

AFAIK questo non va bene, dato che 'rake spec' chiamerà' db: schema: load' ad un certo punto e se si imposta l'ambiente in questo modo, proverò lo schema di caricamento da 'test' a' test'? – Ali

3

Ecco cosa ha risolto il tutto per me. Anch'io ero in grado di eseguire rake spec RAILS_ENV=test ho avuto la mia Gemfile come questo

group :developmet do 
    gem 'rspec-rails','2.9.0' 
... 
end 
group :test do 
    gem 'rspec-rails','2.9.0' 
... 
end 

ho cambiato in questo, fare un blocco per il test e lo sviluppo e la messa prima lo stato di sviluppo. Mi sono anche assicurato che le mie migrazioni di db fossero tutte entrate nel test db. db:migrate RAILS_ENV=test

group :development,:test do 
    gem 'rspec-rails','2.9.0' 
     ... 
end 
group :development do 
    ... 
end 
+2

hmm ... quelli sono funzionalmente identici, tranne forse l'errore ortografico di "sviluppo" nell'origine Gemfile? Ciò farebbe in modo che rspec non venga caricato (fallisce silenziosamente). – Rob

3

Secondo RSpec-rail GitHub, mettere RSpec-rail gioiello nelle sviluppo e test gruppi della Gemfile. Questo perché il task di rake di test carica l'ambiente di sviluppo prima di passare all'ambiente di test.

group :development, :test do 
    gem 'rspec-rails' 
end 

Inoltre, se si sta utilizzando Gemfile, utilizzare "fascio exec spec rake" per eseguire tutte le caratteristiche del tuo. Per eseguire un singolo file spec, utilizzare "bundle exec rake rspec percorso/su/spec_file". L'uso di "bundle exec" garantisce che tu stia utilizzando il comando rake corretto installato tramite Gemfile invece del comando di rake di sistema.

Riferimento: https://github.com/rails/rails/issues/8591