Tuesday, 15 January 2013

ruby - RSpec raises NameErrors for code in subdirectory of /lib -


मेरे पास एक मणि परियोजना है, जो निम्न संरचना है:

  foo-bar ├── Lib │ └── foo │ ├── बार │ │ └── qux.rb │ └── bar.rb └── spec_helper.rb └── इकाई ├── baz_spec.rb └── qux_spec .rb  

में lib / foo , bar.rb एक मॉड्यूल Foo :: Bar को परिभाषित करता है, और उसके अंदर, एक वर्ग Foo :: Bar :: Baz । अंदर lib / foo / bar , qux.rb एक क्लास Foo :: Bar :: Qux को परिभाषित करता है।

< कोड> spec_helper.rb आरएसपीसी और सरलकोव सेट करता है, और के साथ समाप्त होता है 'foo / bar' baz_spec.rb और qux_spec.rb दोनों के साथ की आवश्यकता होती है 'spec_helper'

baz_spec.rb < / Code> में फू :: बार :: बेज़ के लिए ऐनक है, और यह ठीक काम करता है। qux_spec.rb , हालांकि, जिसके पास Foo :: Bar :: Qux के लिए ऐनक है, इसमें विफल रहता है:

  / उपयोगकर्ता / मुझे /foo-bar/spec/unit/qux_spec.rb:6:in `& lt; मॉड्यूल: बार & gt; ': uninitialized निरंतर Foo :: Bar :: Qux (NameError) / users / me / foo-bar / spec / इकाई से /qux_spec.rb:4:in` & lt; मॉड्यूल: फ़ू & gt; ' से / यूज़र / आईएमए / एफू -बार / एसपीईसी / यूनिट / सीएक्स_एसपीसीआरबी:3:IN` & lt; शीर्ष (आवश्यक) & gt; /Users/me/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.2/lib/rspec/core/configuration.rb:1226: से `लोड '... (आदि) से  

मैंने यह सत्यापित कर लिया है कि यह Foo :: Bar :: Baz के लिए lib / foo / bar से कोड को स्थानांतरित करके सिर्फ एक टाइपो नहीं है .rb और अपनी स्वयं की फ़ाइल में, lib / foo / bar / baz.rb , उसके बाद baz_spec.rb भी कार्य करना बंद कर देता है।

< P> यह भी एक अंतर बनाने के लिए प्रतीत नहीं होता है कि क्या मैं कक्षा को

  class Foo :: Bar :: Qux ... घोषित करता हूं  

या

  मॉड्यूल फू मॉड्यूल बार क्लास क्यूक्स ...  

मैं रूबी 2.2.0 को आरएसपीसी 3.2.2 मैक ओएस एक्स योसमाइट पर उपयोग कर रहा हूं ।

स्पष्ट रूप से मेरे के साथ कुछ गड़बड़ है, लेकिन रूबी नौसिखिए के रूप में मैं इसे देख नहीं रहा हूं। कोई भी विचार?

आपको foo.rb फ़ाइल ./ lib जोड़ें और प्रत्येक फाइल के लिए आवश्यक विवरण जोड़ दें ताकि आप उन्हें लोड करना चाहते हों। आप संदर्भ के लिए नमूना मणि पर देख सकते हैं: और एक लेख जो आपको रत्न निर्माण के माध्यम से चलता है।


1 comment: