2012-01-20 21 views
8

Tôi muốn thử nghiệm một phương pháp được xác định trong tác vụ cào.Kiểm tra phương pháp được xác định trong tác vụ cào

tập tin cào

#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 

Bây giờ, tôi muốn kiểm tra phương pháp này, task_needs_to_run? trong một tập tin thử nghiệm Làm thế nào để làm điều này?

Lưu ý bổ sung: Tôi lý tưởng muốn thử nghiệm một phương thức riêng khác trong tác vụ rake ... Nhưng tôi có thể lo lắng về điều đó sau.

Trả lời

6

Bạn chỉ có thể làm điều này:

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

Tôi cố gắng này bản thân mình ... xác định một phương pháp bên trong một không gian tên Rake cũng giống như việc xác định nó ở cấp cao nhất.

load nhập Rakefile không chạy bất kỳ tác vụ nào ... nó chỉ xác định chúng. Vì vậy, không có hại trong load nhập Rakefile của bạn bên trong một kịch bản thử nghiệm, vì vậy bạn có thể thử nghiệm các phương pháp liên quan.

+0

Bạn có thể giải thích về điều này không? Tôi xin lỗi tôi không thể theo dõi – Garfield

+0

@Shikher, tôi đã làm một số thử nghiệm và đưa ra một câu trả lời tốt hơn nhiều. Có một cái nhìn! –

8

Cách thông thường để làm điều này là để di chuyển tất cả các mã thực tế vào một mô-đun và để thực hiện nhiệm vụ được chỉ:

require 'that_new_module' 

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

Nếu bạn sử dụng các biến môi trường hoặc đối số lệnh, chỉ cần vượt qua họ trong:

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

Bằng cách này bạn có thể kiểm tra và cấu trúc lại việc triển khai mà không cần chạm vào tác vụ rake.

Các vấn đề liên quan