2012-12-04 94 views
10

我想在我的RSpec调用rake任务英寸如何调用rake任务在rspec的

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

但我得到错误

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

有没有人有一个想法,我们如何能在rspec的代码中调用rake任务。

任何帮助将高度赞赏。

回答

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:migraterake db:migrate像在命令行中使用。

所以将其更改为这应该帮助:

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

非常感谢。它确实有效。现在我有了在'lib/tasks /'文件夹中定义的自定义rake任务。我怎样才能从rspec运行? – MKumar

+0

任何与在'的lib/tasks'文件夹'.rake'扩展默认情况下将包括在内。由于您的Rakefile可能来自rails,因此该任务应该已加载并可用。 – stuartc

+0

获取以下错误失败/错误:rake ['sim:manual_review_referral_program [3]']。invoke RuntimeError: 不知道如何构建任务'sim:manual_review_referral_program [3]' – MKumar

10

Rails的一个简单的办法使用RSpec:

在你spec_helper(或rails_helper对于RSpec的护栏的新版本):

require "rake" 
Rails.application.load_tasks 

然后,当你要调用你的任务,你可以做以下:

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