2012-12-04 12 views
10

Sto provando a richiamare un'attività rake nella mia rspec.Come richiamare un'attività rake in rspec

require "rake" 
    rake = Rake::Application.new 
    Rake.application = rake 
    rake.init 
    rake.load_rakefile 
    rake['rake my:task'].invoke 

Ma sto ottenendo errore

Failure/Error: rake['rake db:migrate'].invoke 
RuntimeError: 
    Don't know how to build task 'rake db:migrate' 

Qualcuno ha un'idea di come possiamo invocare task rake nel codice RSpec.

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

3

a passare in argomenti tra parentesi quadre per invoke:

rake sim:manual_review_referral_program[3,4] 

diventa:

rake['sim:manual_review_referral_program'].invoke(3,4) 

Se il args sono in un array, è possibile effettuare le seguenti operazioni:

args = [3,4] 
rake['sim:manual_review_referral_program'].invoke(*args) 

Maggiori informazioni su questa domanda StackOverflow: How to run Rake tasks from within Rake tasks?.

12

Problema di piccoli nomi, l'attività è db:migrate non rake db:migrate come l'utilizzo della riga di comando.

Così cambiarla a questo dovrebbe aiutare:

rake['db:migrate'].invoke 
+0

Grazie mille. Funziona. Ora ho il mio compito rake personalizzato che è definito nella cartella 'lib/tasks /'. Come posso eseguirlo da rspec? – MKumar

+0

qualsiasi cosa con un'estensione '.rake' nella cartella' lib/tasks' sarà inclusa per impostazione predefinita. Dato che il tuo Rakefile probabilmente proviene da binari, l'attività dovrebbe essere caricata e disponibile. – stuartc

+0

Errore sotto errore Errore/errore: rake ['sim: manual_review_referral_program [3]']. Invoke RuntimeError: Non so come creare task 'sim: manual_review_referral_program [3]' – MKumar

10

Una soluzione più semplice per Rails con Rspec:

Nella tua spec_helper (o rails_helper versioni più recenti delle RSpec-rails):

require "rake" 
Rails.application.load_tasks 

Poi, quando si vuole invocare il vostro compito è possibile effettuare le seguente:

Rake::Task['my:task'].invoke 
Problemi correlati