我有一个具有以下结构的 gem 项目:
foo-bar
├── lib
│ └── foo
│ ├── bar
│ │ └── qux.rb
│ └── bar.rb
└── spec
├── spec_helper.rb
└── unit
├── 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
设置 RSpec 和 Simplecov,并以require 'foo/bar'
. 两者baz_spec.rb
都qux_spec.rb
以require 'spec_helper'
.
baz_spec.rb
具有 的规格Foo::Bar::Baz
,并且工作正常。qux_spec.rb
但是,具有 的规格的Foo::Bar::Qux
,失败并显示:
/Users/me/foo-bar/spec/unit/qux_spec.rb:6:in `<module:Bar>': uninitialized constant Foo::Bar::Qux (NameError)
from /Users/me/foo-bar/spec/unit/qux_spec.rb:4:in `<module:Foo>'
from /Users/me/foo-bar/spec/unit/qux_spec.rb:3:in `<top (required)>'
from /Users/me/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.2/lib/rspec/core/configuration.rb:1226:in `load'
...
(etc.)
Foo::Bar::Baz
我已经通过将代码移出lib/foo/bar.rb
和移入自己的文件来验证这不仅仅是一个错字lib/foo/bar/baz.rb
,之后baz_spec.rb
也停止工作。
我是否将课程声明为
class Foo::Bar::Qux
...
或作为
module Foo
module Bar
class Qux
...
我在 Mac OS X Yosemite 上使用 Ruby 2.2.0 和 RSpec 3.2.2。
显然我的 . 有问题requires
,但作为一个 Ruby 新手,我没有看到它。有任何想法吗?