10

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 タスクで別のプライベート メソッドもテストしたいと思います...しかし、後で心配することができます。

4

3 に答える 3

8

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

require 'that_new_module'

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

環境変数またはコマンド引数を使用する場合は、それらを渡すだけです。

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

このようにして、rake タスクにまったく触れることなく、実装をテストおよびリファクタリングできます。

于 2012-01-20T12:30:49.683 に答える
6

これを行うことができます:

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

私はこれを自分で試しました... Rake名前空間内でメソッドを定義することは、トップレベルで定義することと同じです。

loadRakefile を実行してもタスクは実行されません...単に定義するだけです。loadそのため、テスト スクリプト内で Rakefile を実行しても害はなく、関連するメソッドをテストできます。

于 2012-01-26T21:19:23.147 に答える