2012-01-20 41 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]) 

通過這種方式,您可以測試並重構實現,而無需觸摸耙子任務。

相關問題