2012-01-26 14 views
31

Stavo indagando utilizzando lo strumento di creazione Rake per automatizzare i test delle unità in esecuzione. Ho cercato sul web, ma tutti gli esempi riguardavano l'uso delle rotaie. Di solito scrivo solo piccoli programmi da riga di comando o semplici applicazioni Sinatra.Test di unità Ruby in esecuzione con Rake

Così mi si avvicinò con la seguente soluzione (probabilmente cattivo) che emula proprio quello che vorrei fare sulla riga di comando: (Ho appena eseguito un test di unità come un esempio.)

desc 'Run unit tests' 
task :test do 
    sh 'ruby -I lib test/test_entry.rb' 
end 
task :default => :test 

E funziona , ma non posso fare a meno di pensare che ci deve essere un modo migliore, solo scrivere require 'test/test_entry.rb' non funziona. Ottengo problemi require, Ruby non riesce a trovare la directory lib, dove si trovano tutti i file.

risposta

60

Utilizzare Rake :: TestTask http://rake.rubyforge.org/classes/Rake/TestTask.html. Inserisci questo nel tuo file Rake e quindi esegui rake test:

require 'rake/testtask' 

Rake::TestTask.new do |t| 
    t.libs << "test" 
    t.test_files = FileList['test/test*.rb'] 
    t.verbose = true 
end 
+0

Grazie mille. Questo ha funzionato molto bene! – kmikael

+0

Se ti piace organizzare i tuoi test in sottodirectory, prova ''test/**/test * .rb'' per adattarlo. – tadman

2

Il problema è che la directory lib non è inclusa nel percorso di caricamento di Ruby. È possibile risolvere il problema così:

$:.unshift 'lib' 
require 'test_entry' 

o più affidabile alternativa che aggiunge ampliato percorso di lib directory al percorso di carico:

$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib')) 
require 'test_entry' 

Btw, variabile globale $: ha alias più prolisso $LOAD_PATH.

+0

Grazie anche per questo suggerimento. – kmikael

Problemi correlati