2012-07-07 41 views
12

मैं अपनी रेल परियोजनाओं में से एक को Ruby 1.9.2 पर अपग्रेड करने का प्रयास कर रहा हूं। सब बहुत अच्छी तरह से चला गया, लेकिन एक आरएसपीसी परीक्षण तोड़ दिया। इस परीक्षण में मैं require एक रूबी lib:रूबी के साथ आरएसपीईसी में lib की आवश्यकता है 1.9.2 "लोड करने के लिए ऐसी कोई फ़ाइल नहीं" लाती है

# file spec/models/my_lib_spec.rb 
require 'spec_helper' 
require 'lib/services/my_lib' 

describe "MyLib" do 

    it "should do something" do 
... 

इस तरह lib दिखता है:

# file lib/services/my_lib.rb 
class MyLib 

    def self.do_something 
    ... 

रूबी 1.8.7 (REE) में परीक्षण अच्छी तरह से काम:

$ ruby -v 
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby 
Enterprise Edition 2011.03 
$ rspec ./spec/models/my_lib_spec.rb 
.. 

Finished in 1.4 seconds 
2 examples, 0 failures 

में रुबी 1.9.2 मुझे एक त्रुटि मिली no such file to load:

$ ruby -v 
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] 
$ rspec ./spec/models/my_lib_spec.rb 
/Users/tmangner/.rvm/gems/[email protected]/gems/activesupport- 
3.2.2/lib/active_support/dependencies.rb:251:in `require': no such file 
to load -- lib/services/my_lib (LoadError) 

मेरे पास कोई सुराग नहीं है, जो lib को खोजने से रूबी 1.9 रखता है।

उत्तर

23

रूबी 1.9 में लोड पथ ठीक तरह से काम नहीं करता है जैसा कि यह 1.8 में किया गया था।

आपको प्रोजेक्ट की रूट निर्देशिका को अपने लोड पथ में जोड़ने की आवश्यकता है।

आप इस तरह या तो चल rspec करके ऐसा कर सकते:

rspec -I . ./spec/models/tipp_remember_spec.rb 

... या मैन्युअल रूप से (अपने spec_helper.rb में लोड पथ के लिए सामान जोड़ने अपने spec_helper.rb

$:<< File.join(File.dirname(__FILE__), '..') 
के शीर्ष पर इस डाल से

मुझे लगता है कि डिफ़ॉल्ट रूप से rspec रूप में अच्छी तरह लोड पथ के लिए अपने स्थानीय lib निर्देशिका कहते हैं, तो आप लाइन की आवश्यकता को फिर से लिखने के लिए सक्षम के रूप में के बजाय इस प्रकार हो सकती है:

require 'services/my_lib' 
+3

आपके उत्तर का अंतिम भाग कुंजी था! रूबी 1.9 _and_ रूबी 1.8 में "सेवा '/ my_lib' की आवश्यकता होती है। जाहिर है आरएसपीसी में $ libAD_PATH में 'lib' शामिल है। – DiegoFrings

+1

बढ़िया! rspec '- मैं .' कुंजी मेरे लिए जब 1.8 से 1.9 के लिए गहरे लाल रंग का उन्नयन है। बहुत धन्यवाद @ फ्रोस्ट! आप 'मैं .' हर बार जब आप चलाने निर्दिष्ट करने के लिए नहीं करना चाहती –

+0

तो' rspec' आप इसे अपने .rspec फाइल करने के लिए जोड़ सकते हैं और यह डिफ़ॉल्ट रूप से जोड़ दिया जाएगा। – bloudermilk

0

प्रयास करें मैन्युअल

$LOAD_PATH << './lib/services/'

और फिर इस

require 'my_lib.rb' 
4

तरह पुस्तकालय जोड़ने के अपने कल्पना spec/models/my_lib_spec.rb स्थित है और आप lib/services/my_lib.rb परीक्षण करना चाहते हैं पथ को परिभाषित है, तो बस बता कल्पना करें कि lib फ़ाइल कैसे प्राप्त करें

require 'spec_helper' 
require_relative '../../lib/services/my_lib' 

describe "MyLib" do 

    it "should do something" do 

अंतिम नोट: आप spec_helper शामिल कर रहे हैं के बाद से, आप आमतौर पर के बाद से रेल आप के लिए इन सभी को लोड करना चाहिए, निर्भरता के लिए सभी रास्ते देने के लिए नहीं है।

6

आरएसपीसी 2.x में, lib निर्देशिका स्वचालित रूप से लोड पथ में जोड़ा जाता है (RSpec-Core#get_started देखें)।

तो तुम सिर्फ अपने कल्पना फ़ाइल में require 'services/my_lib' उपयोग कर सकते हैं।

+0

मैं नहीं देख सकता कि 'lib निर्देशिका स्वचालित रूप से लोड पथ में भी जोड़ा जाता है', लेकिन यह सच है – why

+0

@ मैंने टूटी हुई लिंक को क्यों तय किया। ऐसा लगता है कि यह स्पष्ट रूप से वहां नहीं बताया गया है, लेकिन उदाहरण यह दिखाता है कि यह पूरी तरह से उपयोग किया जाता है। मैं इसे ठीक करने की कोशिश करूंगा। –

+0

आरएसपीसी 3.5 (नवीनतम) के लिए लिंक [यहां] है (http://rspec.info/documentation/3.5/rspec-core/index.html#Get_Started)। –