我有一个配置了rspec的gem项目。我的文件夹结构如下所示-
lib/
- foo/
- foo.rb
- alpha.rb
spec/
- spec_helper.rb
integration/
- alpha_spec.rb
档案
foo.rb
和
alpha.rb
在类定义方面具有以下结构。
# lib/foo/foo.rb
class Foo
# do stuff
end
和
# lib/foo/alpha.rb
require_relative 'foo'
class Foo
class Alpha
# do stuff
end
end
这里的主要收获是
Alpha
是需要“foo”的嵌套类。直接。(使用它的人会
require foo/alpha
(来自他们的剧本)
我的
spec_helper.rb
文件只需要加载我的库
foo/alpha
-
# spec/spec_helper.rb
# Check if `Foo` class is already defined
Object.const_defined?('Foo') ? puts "IS DEFINED" : "IS NOT DEFINED"
require 'foo/alpha'
令我惊讶的是,持续的
Foo
在需要之前就已经加载了
alpha/foo
,作为输出返回
IS DEFINED
.
因为这个,我的
require
语句试图加载
阿尔法rb
这反过来又需要
福。rb
这是错误的
foo.rb:1:in `<top (required)>': Foo is not a class (TypeError)
根据
this thread
,当类(
福
)已经定义了。
这是怎么发生的?RSpec是否试图在幕后施展魔法并加载我的库?我该怎么解决这个问题?
编辑
:我还删除了
--require spec_helper
我妈妈的台词
.rspec
所以只有在我运行测试时才能手动加载。