2013-03-06 12 views
8

Sto usando Rails 4.0.0.beta1. Ho aggiunto due directory: app/services e test/services.rake: test non eseguito test personalizzati nella sottodirectory

Ho anche aggiunto questo codice, basato sulla lettura testing.rake of railties:

namespace :test do 
    Rake::TestTask.new(services: "test:prepare") do |t| 
    t.libs << "test" 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 

Ho scoperto che rake test:services esegue i test in test/services; tuttavia, rake test non esegue questi test. Sembra che sia; ecco il code:

Rake::TestTask.new(:all) do |t| 
    t.libs << "test" 
    t.pattern = "test/**/*_test.rb" 
end 

Ho trascurato qualcosa?

risposta

11

Aggiungere una riga come questa dopo la sua definizione compito di prova:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke } 

Non so il motivo per cui non sono automaticamente ottenere raccolti, ma questa è l'unica soluzione che ho trovato che funziona per test :: Unit.

Penso che se dovessi eseguire rake test:all eseguiresti i tuoi test aggiuntivi, ma il solo rake test non lo sarà senza lo snippet sopra.

+0

Buon punto: 'test' e' test: all' compiti sono diversi. –

+0

Ri: "Non so perché non vengono automaticamente rilevati" - Non so se questo è intenzionale, o semplicemente un'asimmetria sviluppata come le modifiche sono state apportate. Così ho aggiunto un [commento sulla richiesta pull che ha aggiunto il test: all task] (https://github.com/rails/rails/pull/9177#issuecomment-14575192). –

+0

Grazie mille, Jim. – Ashitaka

4

Per coloro che utilizzano una recente versione più Rails (4.1.0 nel mio caso)

Uso Rails::TestTask invece di Rake::TestTask e sovrascrivere run compito:

namespace :test do 
    task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services'] 
    Rails::TestTask.new(services: "test:prepare") do |t| 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 
3

soluzione di Jim funziona, ma si finisce per correre la suite di test in più come compito separato e non come parte del tutto (almeno usando Rails 4.1). Quindi le statistiche di test vengono eseguite due volte anziché aggregate. Non ritengo che questo sia il comportamento desiderato qui.

Questo è come ho finito per la soluzione di questo (utilizzando Rails 4.1.1)

# Add additional test suite definitions to the default test task here 

namespace :test do 
    Rails::TestTask.new(extras: "test:prepare") do |t| 
    t.pattern = 'test/extras/**/*_test.rb' 
    end 
end 

Rake::Task[:test].enhance ['test:extras'] 

Questo provocare un comportamento esattamente previsto semplicemente compreso il nuovo test:extras attività nella serie di compiti eseguiti da rake test e, naturalmente, il valore predefinito rake. È possibile utilizzare questo approccio per aggiungere un numero qualsiasi di nuove suite di test in questo modo.

Se si utilizza Rails 3, credo che il passaggio a Rake::TestTask funzionerà per voi.

3

O semplicemente gestita rake test:all

Se si desidera eseguire tutti i test per impostazione predefinita, ignorare compito di prova:

namespace :test do 
    task run: ['test:all'] 
end 
Problemi correlati