2012-01-20 19 views
8

我想测试rake任务中定义的方法。测试rake任务中定义的方法

耙文件

#lib/tasks/simple_task.rake 
namespace :xyz do 
    task :simple_task => :environment do 
     begin 
      if task_needs_to_run? 
       puts "Lets run this..." 
       #some code which I don't wish to test 
       ... 
      end 
     end 
    end 
    def task_needs_to_run? 
     # code that needs testing 
     return 2 > 1 
    end 

end 

现在,我想测试这种方法,task_needs_to_run?在测试文件 我该怎么办呢?

附加说明:我想理想情况下想测试另一个私有方法在rake任务中,以及...但我后面可能会担心。

回答

6

你可以只是这样做:

require 'rake' 
load 'simple_task.rake' 
task_needs_to_run? 
=> true 

我想这个自己...定义耙命名空间中的方法是一样的在顶层定义它。

load一个Rakefile不运行任何任务......它只是定义它们。因此,在测试脚本中您的Rakefile不会造成任何伤害,因此您可以测试关联的方法。

+0

请您详细说明一下吗?对不起,我无法关注 – Garfield

+0

@Shikher,我做了一些实验,想出了一个更好的答案。看一看! –

8

通常的方式做,这是把所有实际的代码放到一个模块并保留任务的实现是唯一:如果您使用环境变量或者命令的参数

require 'that_new_module' 

namespace :xyz do 
    task :simple_task => :environment do 
    ThatNewModule.doit! 
    end 
end 

,只是通过他们:

ThatNewModule.doit!(ENV['SOMETHING'], ARGV[1]) 

通过这种方式,您可以测试并重构实现,而无需触摸耙子任务。

相关问题