2012-01-20 14 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? 私はこれをどのように行うのですか?

その他のメモ:私は理想的にはレーキタスクで別のプライベートメソッドをテストしたいと思っています...しかし、私は後でそれについて心配することができます。

require 'that_new_module' 

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

を使用すると、環境変数やコマンド引数を使用している場合は、単にそれらを渡します:

答えて

6

:私はこれを自分で試してみました...レーキ名前空間内のメソッドを定義する

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

はトップレベルでそれを定義と同じです。

load Rakefileはタスクを実行していません。単にそれらを定義するだけです。したがって、テストスクリプト内でRakefileを作成することに害はありません。そのため、関連するメソッドをテストできます。

+0

これについて詳しく教えてください。 – Garfield

+0

@Shikherに従うことができなかったことを申し訳なく思って、私はいくつかの実験を行い、はるかに良い答えを思いついた。見てみましょう! –

8

これを行うための通常の方法は唯一であることをモジュールにすべての実際のコードを移動し、タスクの実装を残すことである

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

あなたがテストし、まったくrakeタスクを触れることなく実装をリファクタリングすることができますこの方法。あなたはちょうどこの行うことができます

関連する問題