2012-01-20 21 views
8

में परिभाषित विधि का परीक्षण करना मैं रेक रेक में परिभाषित विधि का परीक्षण करना चाहता हूं।रेक रेक

रेक फ़ाइल

#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 एक रेकैकाइल में कोई भी कार्य नहीं चलाता है ... यह सिर्फ उन्हें परिभाषित करता है। तो load में एक टेस्ट स्क्रिप्ट के अंदर अपने रेकैकाइल में कोई नुकसान नहीं है, इसलिए आप संबंधित तरीकों का परीक्षण कर सकते हैं।

+0

क्या आप इस पर विस्तृत जानकारी दे सकते हैं? मुझे खेद है कि मैं – Garfield

+0

@ शिकर का पालन नहीं कर सका, मैंने कुछ प्रयोग किया और एक बेहतर जवाब के साथ आया। एक नज़र देख लो! –

8

यह करने के लिए हमेशा की तरह ही होने के लिए एक मॉड्यूल में सभी वास्तविक कोड स्थानांतरित करने के लिए और काम कार्यान्वयन छोड़

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

इस तरह आप रेक कार्य को छूए बिना कार्यान्वयन का परीक्षण और पुन: सक्रिय कर सकते हैं।

संबंधित मुद्दे