2012-12-04 2 views
10

내 rspec에서 rake 태스크를 호출하려고합니다.rspec에서 rake 태스크를 호출하는 방법

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

하지만 난 사람이 우리가 RSpec에 코드에서 레이크 작업을 호출 할 수있는 방법을 생각을 가지고 있는가 오류

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

얻고있다.

도움을 주시면 감사하겠습니다.

답변

3

invoke에 대괄호로 인수를 전달하려면

rake sim:manual_review_referral_program[3,4] 

이된다 :

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

args이 귀하의 경우 배열에서 다음을 수행 할 수 있습니다.

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

이 StackOverflow 질문에 대한 정보 : How to run Rake tasks from within Rake tasks?.

12

작은 네임 스페이스 문제는 작업이 db:migrate이 아니고 명령 줄 사용과 비슷합니다.

그래서이로 변경이 도움이 될 것입니다

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

고마워요. 그것은 효과가있다. 이제 'lib/tasks /'폴더에 정의 된 사용자 정의 레이크 작업이 있습니다. rspec에서 어떻게 실행할 수 있습니까? – MKumar

+0

'lib/tasks' 폴더에'.rake' 확장자가있는 것은 기본적으로 포함됩니다. Rakefile은 아마도 레일에서 나온 것이므로 작업을로드하여 사용할 수 있어야합니다. – stuartc

+0

아래 오류 받기 rake [ 'sim : manual_review_referral_program [3]'] 호출 RuntimeError : 'sim : task_review_referral_program [3]'작업을 빌드하는 방법을 모른다. – MKumar

10

더 간단한 RSpec에와 레일에 대한 솔루션 :에서

당신의 spec_helper (또는 RSpec에 레일의 최신 버전에 대한 rails_helper) : 당신이 당신의 작업을 호출 할 때를 할 수있는 그런

require "rake" 
Rails.application.load_tasks 

다음 :

Rake::Task['my:task'].invoke 
관련 문제