6

Basta chiedersi se esiste un modo per eseguire i test di Rails senza perdere il database. Al momento eseguo solo test unitari e sto utilizzando il seguente comando rake per farlo: rake test:units.Esegui i test delle guide senza perdere il database di test

Grazie per l'aiuto in anticipo!

Solo nel caso questo è rilevante:

  • Rails 3
  • di Ruby 1.8.7 (MRI)
  • Oracle Database 11g
    • activerecord-oracle_enhanced adattatore

risposta

2

Dopo aver fatto qualche ricerca, ho scoperto che non esiste un modo per farlo. Le attività di test rake interromperanno sempre il database, anche quando viene fornita l'opzione TEST= come suggerisce Bohdan.

Utilizzando l'opzione --trace, questo può essere provato. Ecco l'output:

$ rake test:units TEST=test/unit/post_test.rb --trace 
(in /Users/johnnyicon/Development/ror/test-app) 
** Invoke test:units (first_time) 
** Invoke test:prepare (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
** Execute db:test:prepare 
** Invoke db:test:load (first_time) 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:load 
** Invoke db:schema:load (first_time) 
** Invoke environment 
** Execute db:schema:load 
** Execute test:prepare 
** Execute test:units 

Leggendo il Ruby on Rails Guides for Testing, descrive quello che alcuni di questi compiti rake dire. Quello a cui prestare particolare attenzione è l'attività db:test:load, che si vede sulla settima riga dalla parte inferiore dell'output come ** Execute db:test:load. Le guide dicono che il seguente su questa operazione:

ricreare il database di prova dal schema.rb corrente

Quindi, anche se dovessi eseguire l'unità di test ad uno ad uno come suggerisce Bohdan, il il rake task ricreasse comunque il database. Non è la risposta che speravo, ma non è più un problema.

Il motivo per cui stavo chiedendo di iniziare era perché non avevo accesso a un altro database da utilizzare per il test, quindi stavo anche usando il mio database di sviluppo per testare. Ma da allora, sono stato in grado di ottenere un altro database dedicato per i test.

Grazie comunque Bohdan! Apprezzo l'aiuto!

+1

Felice di sentirlo. Il database di test * deve * essere cancellato ogni volta che si eseguono i test, altrimenti i test saranno imprecisi. –

0

Non è possibile scrivere un'attività Rake personalizzata in cui la scimmia ha applicato patch al Rake db: test: caricare l'attività per non eseguire nulla?

0

Per chi cerca un modo per ignorare il comportamento di default Rails', prova ad aggiungere questo alla tua Rakefile:

Rake::Task["db:test:prepare"].clear 
Rake::Task["db:test:load"].clear 
Rake::Task["db:test:purge"].clear 
+0

questo non funziona! – dariush

1

in Rails 5 (e versioni precedenti), eventualmente, solo commento out la riga seguente nel spec/rails_helper.rb:

ActiveRecord::Migration.maintain_test_schema! 

Ciò impedirà rake test o rspec di tentare di eliminare il DB di test. Avrai bisogno di eseguire anche le migrazioni manualmente.