2012-12-04 9 views
10

Próbuję wywołać zadanie rake w moim rspec.Jak wywołać zadanie rake w rspec

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

ale otrzymuję błąd

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

Czy ktoś ma pomysł jak możemy powołać zadanie natarcia w kodzie rspec.

Każda pomoc będzie bardzo ceniona.

Odpowiedz

3

Aby przejść w argumenty w nawiasach kwadratowych do invoke:

rake sim:manual_review_referral_program[3,4] 

staje:

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

Jeśli Twój args są w tablicy można wykonać następujące czynności:

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

Więcej informacji na temat tego pytania StackOverflow: How to run Rake tasks from within Rake tasks?.

12

Mały problem z przestrzenią nazw, zadaniem jest db:migrate nie rake db:migrate podobnie jak użycie linii poleceń.

więc zmieniając go to powinno pomóc:

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

Wielkie dzięki. To działa. Teraz mam własne niestandardowe zadanie rake, które jest zdefiniowane w folderze 'lib/tasks /'. Jak mogę uruchomić to z rspec? – MKumar

+0

cokolwiek z rozszerzeniem '.rake' w folderze' lib/tasks' będzie domyślnie dołączone. Ponieważ Twój Rakefile prawdopodobnie pochodzi z szyn, zadanie powinno być załadowane i dostępne. – stuartc

+0

Wystąpienie błędu Błąd/Błąd: rake ['sim: manual_review_referral_program [3]'] invoke RuntimeError: Nie wiem, jak zbudować zadanie "sim: manual_review_referral_program [3] ' – MKumar

10

Prostszym rozwiązaniem dla Rails z RSpec:

w twojej spec_helper (lub rails_helper nowsze wersje rspec szynach):

require "rake" 
Rails.application.load_tasks 

Potem, gdy chcesz wywołać zadanie można wykonać następujący:

Rake::Task['my:task'].invoke 
Powiązane problemy