2009-04-28 17 views
41

मेरे पास एक मॉडल है जो एक पार्सर ऑब्जेक्ट से अपना डेटा प्राप्त करता है। मैं सोच रहा हूं कि पार्सर क्लास lib/directory में रहना चाहिए (हालांकि मुझे यह राजी किया जा सकता है कि इसे कहीं और रहना चाहिए)। सवाल यह है कि पार्सर क्लास के लिए मेरा यूनिट परीक्षण कहां होना चाहिए? और मैं कैसे सुनिश्चित करूं कि जब भी मैं रेक परीक्षण चलाता हूं तो वे दौड़ते हैं?रेल: lib/निर्देशिका में कोड का परीक्षण कैसे करें?

उत्तर

24

रेल एप्लिकेशन में मैं काम कर रहा हूं, मैंने केवल test\unit निर्देशिका में परीक्षण करने का निर्णय लिया है। मैं भी मॉड्यूल/निर्देशिका से घोंसला होगा उन्हें रूप में अच्छी तरह, उदाहरण के लिए:

lib/a.rb => test/unit/a_test.rb 
lib/b/c.rb => test/unit/b/c_test.rb 

मेरे लिए, यह पिछले प्रतिरोध के रास्ते के रूप में इन परीक्षणों किसी अन्य परिवर्तन करने के लिए बिना भाग गया।

निम्नलिखित

namespace :test do 

    desc "Test lib source" 
    Rake::TestTask.new(:lib) do |t|  
    t.libs << "test" 
    t.pattern = 'test/lib/**/*_test.rb' 
    t.verbose = true  
    end 

end 

नकल test dir के तहत अपने lib निर्देशिका की संरचना के साथ lib/tasks/test_lib_dir.rake बनाएँ, इसी परीक्षण के साथ lib कोड की जगह:

+2

यह अब रेल 5 – Qqwy

20

यहाँ एक तरीका है।

अपने lib परीक्षण चलाने के लिए rake test:lib चलाएं।

यदि आप rake test का आह्वान करते समय सभी परीक्षण चलाने के लिए चाहते हैं, तो आप अपनी नई रेक फ़ाइल में निम्नलिखित जोड़ सकते हैं।

lib_task = Rake::Task["test:lib"] 
test_task = Rake::Task[:test] 
test_task.enhance { lib_task.invoke } 
+0

के साथ काम नहीं करता है किसी भी तरह से यह पर्यावरण को लोड नहीं करता है (विशेष रूप से 'सक्रिय समर्थन' के 'फिक्स्चर'), और इसे रेकैकाइल में मजबूर करने का कोई तरीका नहीं है। –

+1

अरे, मैंने आपके समाधान की कोशिश की और 'रेक टेस्ट: lib' मेरा परीक्षण चलाता है, लेकिन 'रेक टेस्ट' नहीं करता है। मैंने इसे क्रियान्वित किया। यहां मेरी फ़ाइल सामग्री का एक लिंक दिया गया है: http://pastebin.com/FHMXU6vG अग्रिम धन्यवाद! – robert

8

मैं एक ही बात काम करना चाहते थे लेकिन rspec & autospec साथ और यह सिर्फ जहाँ वे निर्देशिका/फ़ाइल पैटर्न है कि निर्धारित चलाने के लिए जो परीक्षण फ़ाइलों की सूची मिल रहे थे यह पता लगाने की एक छोटे से खुदाई ले लिया। अंत में मैं lib/कार्य/rspec.rake में यह पाया: 86

[:models, :controllers, :views, :helpers, :lib, :integration].each do |sub| 
    desc "Run the code examples in spec/#{sub}" 
    Spec::Rake::SpecTask.new(sub => spec_prereq) do |t| 
     t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] 
     t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"] 
    end 
    end 

मैं एक नया कल्पना/libs डायरेक्टरी में मेरा परीक्षण रखा था जब rpsec.rake फ़ाइल कल्पना/lib में देखने के लिए कॉन्फ़िगर किया गया था। बस libs का नाम बदलना -> lib ने चाल की है!

+0

मेरे पास किसी भी तरह से मेरी परियोजना में डिफ़ॉल्ट रूप से '/ lib' है। दुर्भाग्य से 'रेक टेस्ट' फाइलों को पकड़ नहीं लेता है, इसलिए यह केवल आरएसपीईसी है और मुझे ऊपर दिए गए समाधान का उपयोग करना होगा। –

0

कस्टम परिभाषित फ़ोल्डर्स से परीक्षण चलाने के लिए अतिरिक्त रेक कार्यों को परिभाषित करने के लिए आप उन्हें rake test:all कमांड के साथ भी चला सकते हैं। lib फ़ोल्डर या किसी अन्य कस्टम फ़ोल्डर के लिए टेस्ट फ़ोल्डर्स संरचना आपके ऊपर है। लेकिन मैं कक्षाओं में उन्हें डुप्लिकेट करना पसंद करता हूं: libtest/lib, app/form_objects से test/form_objects से मेल खाता है।

3

परीक्षण/इकाई/lib के तहत निर्देशिका बनाने के लिए एक आसान और साफ तरीका है। फिर lib/foo.rb से संबंधित परीक्षण/इकाई/lib/foo_test.rb के रूप में परीक्षण बनाएं। कोई नया रेक कार्य आवश्यक नहीं है, और यदि आप lib निर्देशिका संरचना से मेल खाने के लिए आवश्यक हैं तो आप अधिक निर्देशिकाओं को घोंसला कर सकते हैं।

-2

उपयोग:

[spring] rake test:all 

निर्देशिका आपके द्वारा बनाए (जैसे [root]/test/lib/) सहित सभी परीक्षण चलाने के लिए।

अगर [spring] छोड़ें तो टूर इसका उपयोग नहीं कर रहा है।

+0

रेक निरस्त! पता नहीं कि कार्य 'परीक्षण कैसे बनाएं: सभी' – Intentss

3

Rails 4.0 के रूप में:

rake test:all   # Run all tests in any subdir of `test` without resetting the DB 
rake test:all:db  # Same as above and resets the DB 

Rails 4.1 के रूप में, फिर से परिभाषित test:run अतिरिक्त कार्य शामिल करने के लिए जब rake या rake test चल:

# lib/tasks/test.rake 

namespace :test do 
    Rake::Task["run"].clear 
    task run: ["test:units", "test:functionals", "test:generators", "test:integration", "test:tasks"] 

    ["tasks"].each do |name| 
    Rails::TestTask.new(name => "test:prepare") do |t| 
     t.pattern = "test/#{name}/**/*_test.rb" 
    end 
    end 
end 

यह दिए गए उदाहरण में rake test:tasks को परिभाषित करने के अतिरिक्त लाभ यह है ।

Rails 4.2 के रूप में, test:run उन्हें सहित जब rake test चल रहा है, और इस तरह raketest के सभी उपनिर्देशिका भी शामिल है।

+0

रेल 5 में, ये अलग-अलग कार्य मौजूद नहीं हैं। – Qqwy

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