2011-12-08 8 views
5

रेल और आरएसपीईसी का उपयोग करना आरएसपीईसी मेरे लिए आवश्यक फाइलें उत्पन्न करना आसान है जब मैं rails generate मॉडल/विचार/नियंत्रकों के साथ कमांड का उपयोग कर रहा हूं। लेकिन अब मैं लिखने वाले मॉड्यूल के लिए चश्मा लिखना चाहता हूं। मॉड्यूल /lib/my_module.rb में है तो मैं /spec/lib/my_module_spec.rbमॉडल/व्यू/नियंत्रक के अलावा अन्य फ़ाइलों के लिए चश्मा लिखना/चलाने के लिए

में एक कल्पना बनाई समस्या मैं आ रही है कि जब मैं rspec spec/ फ़ाइल my_module_spec.rb चलाया जाता है करने की कोशिश लेकिन lib/my_module.rb में मेरी मॉड्यूल के संदर्भ में नहीं पाया जा सकता है है। ऐसा करने का सही तरीका क्या है?

बस FYI my_module_spec.rb फ़ाइल require 'spec_helper' उस में पहले से ही

require 'spec_helper' 

describe "my_module" do 
    it "first test" 
    result = MyModule.some_method # fails here because it can't find MyModule 
    end 
end 
+0

क्या आप अपने my_module_spec.rb में मॉड्यूल शामिल करते हैं? क्या आप स्रोत प्रदान कर सकते हैं? – Jasper

+0

@ जैस्पर मैंने नहीं किया। लेकिन मुझे मॉडल/विचार/नियंत्रकों के साथ ऐसा करने की भी आवश्यकता नहीं है। – Brand

+1

क्या आपको संबंधित स्पेक में मॉड्यूल स्रोत फ़ाइल की आवश्यकता है? '# {Rails.root} /lib/my_module.rb "की आवश्यकता है" मुझे आपके द्वारा देखे जा रहे एक समान मुद्दे थे और यह नीचे जैस्पर के समाधान के साथ मिलकर मुझे मिला जहां मुझे होना जरूरी था। – jaydel

उत्तर

9

आपने मॉड्यूल सहित और हो सकता है एक वस्तु

require 'spec_helper' 

#EDIT according to 
# http://stackoverflow.com/users/483040/jaydel 
require "#{Rails.root}/lib/my_module.rb" 

describe MyModule do 

    let(:wrapper){ 
    class MyModuleWrapper 
     include MyModule 
    end 
    MyModuleWrapper.new 
    } 

    it "#some_method" do 
    wrapper.some_method.should == "something" 
    end 

end 
0

में यह लपेटकर अपने config/application.rb फ़ाइल में निम्न रखो की कोशिश कर सकते है:

config.autoload_paths += %W(#{Rails.root}/lib) 

मैं बस w एक ही समस्या के साथ आराम, और उपर्युक्त मेरे लिए काम किया। आरएसपीईसी से lib/ फाइलों तक पहुंचने और उनके लिए परीक्षण लिखने में सक्षम होने के लिए आपको हुप्स के माध्यम से कूदने के लिए वास्तव में कोई कारण नहीं है।

1

क्या आपके मॉड्यूल में क्लास विधियों या उदाहरण विधियां हैं? याद रखें कि केवल वर्ग तरीकों जिसका अर्थ है अपने मॉड्यूल उदाहरण तरीकों मौजूद होता है तो उस some_method रूप

def self.some_method 
    ... 
end 

परिभाषित किया गया है के माध्यम से

MyModule.some_method 

उपलब्ध हो जाएगा, फिर ऊपर जैस्पर का समाधान का उपयोग करें। उम्मीद है कि स्पष्ट करता है।

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

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