2009-09-03 5 views
7

Come posso eseguire i test per la mia app Rails in un ordine casuale? C'è una soluzione semplice usando il rake?Ruby - Esecuzione di test in ordine casuale con rake

+3

Perché vorresti farlo? –

+2

Per garantire che non vi siano dipendenze tra i test? –

+1

Sì, il punto principale per noi è garantire che non ci siano dipendenze tra i test. –

risposta

0

Si potrebbe desiderare di check out "ZenTest 3.9.0: ora con più del male" (non si può fare un collegamento diretto, usare la cache di Google)

Added ability to set test execution order, defaults to :random. EVIL! 
+0

Ho giocato un po 'di tempo con ZenTest, ma non immagino mai come abilitare l'ordine casuale. Voglio dire, l'ordine di esecuzione predefinito è fisso e rimane lo stesso per diverse esecuzioni di test. –

4

Qui si va, definire questo in lib/tasks/tasks.rb

namespace :test do 
    namespace :randomize do 
    desc "Randomize tests" 
    Rake::TestTask.new(:all => "db:test:prepare") do |t| 
     t.libs << "test" 
     t.test_files = Rake::FileList[ 
     'test/unit/**/*_test.rb', 
     'test/functional/**/*_test.rb', 
     'test/integration/**/*_test.rb' 
     ].shuffle 
     t.verbose = true 
    end 
    end 
end 

Run: rake test:randomize:all

Tenete a mente che nel test sui file verrà comunque eseguito nell'ordine in cui appaiono. Immagino che potresti provare l'unità di prova patch di scimmia per farlo.

+0

Grazie Sam. Questo non funziona per me, e in realtà la soluzione che hai postato è la stessa a cui sono arrivato: mescola semplicemente l'array contenente l'elenco dei file di test da eseguire. In effetti, l'ordine dei file di test che si passa al rake TestTask sembra essere ignorato, il che significa che internamente rake ordinerà alfabeticamente questo elenco sul nome del file. Si verifica questo comportamento nell'esecuzione dell'attività rake con l'opzione TESTOPTS = "- v", per monitorare l'ordine di esecuzione del test effettivo. Qui ci sono le versioni che uso: Rubino: 1.8.6 - 114 RubyGems: 1.3.5 Rake: 0.8.7 Rails: 2.3.3 Avete più idee? Tx! –