Ruby RSpec只能在我的Lib目录的根目录中看到类

Ruby RSpec只能在我的Lib目录的根目录中看到类,ruby,rspec,sinatra,specs,Ruby,Rspec,Sinatra,Specs,RSpec(2.12.2)让我很难过。如果我想引用某个规范中的类,而该类不在我的/lib目录的根目录中,它会抛出一个错误: no such file to load -- test (LoadError) 似乎我的规范可以嵌套在文件夹结构中,但当我尝试要求嵌套文件夹中的类(例如lib/workers/conversion\u worker.rb)时,我就遇到了这个错误 我在所有规范中都使用require'spec_helper',但即使硬编码类的路径也会导致相同的错误 在这种结构中: -lib

RSpec(2.12.2)让我很难过。如果我想引用某个规范中的类,而该类不在我的
/lib
目录的根目录中,它会抛出一个错误:

no such file to load -- test (LoadError)
似乎我的规范可以嵌套在文件夹结构中,但当我尝试要求嵌套文件夹中的类(例如
lib/workers/conversion\u worker.rb
)时,我就遇到了这个错误

我在所有规范中都使用require'spec_helper',但即使硬编码类的路径也会导致相同的错误

在这种结构中:

-lib/
  - class_found.rb
  - workers/
     - class_not_found.rb
规范如下所示:

# spec/workers/class_not_found_spec.rb
require "spec_helper"
require "class_not_found"

describe ClassNotFound do    
  it "Does something"
end
以下命令成功运行规范(-I标志将路径添加到$LOAD\u路径):

所以RSpec似乎没有在其路径中添加lib以下的任何内容

我可以使用require\u relative成功地请求class\u not\u found.rb:

require_relative "../../lib/workers/class_not_found.rb" #Succeeds
但不需要:

require "lib/workers/class_not_found.rb" # Fails

根据目录树,文件
class\u未找到。rb
位于子目录
workers
中。您忘了将路径添加到您的
要求

require 'workers/class_not_found'
这是正确的


顺便说一句:你不需要
课程,你需要
文件。

我不知道你是否有你喜欢的答案,但你似乎没有正确地要求你的文件

您的
'lib/class\u found.rb'
文件应该需要您的所有库文件,因此它应该看起来像:

require 'workers/class_not_found'
require 'class_found'
而您的
spec\u helper.rb
将需要
lib
文件夹中的主文件,因此它应该类似于:

require 'workers/class_not_found'
require 'class_found'

rspec在运行时自动加载
'spec/spec\u helper.rb'
,它还自动将
'lib'
文件夹添加到其
加载路径
,以便在
'lib/class\u found.rb'
中正确地看到和需要您的需求。

因此您创建了一个名为
spec/lib/workers/class\u not found\u spec.rb
,,写入
require'spec_helper';模块工人;描述没有找到的类。。。结束;结束
,rspec找不到源代码?@ProGNOMmers我已经更新了问题。希望现在一切都清楚了。你的项目是rails应用程序吗?如果是,您应该将
spec/workers
移动到
spec/lib/workers
@ProGNOMmers这是一个Sinatra应用程序。请尝试
require.“/lib/workers/class_not_found.rb”
在ruby>1.9中找到您需要的文件。/抱歉。糟糕的语义。添加路径不起作用,据我所知,RSpec应该允许没有路径的文件名。
require
与RSpec无关
require
是Ruby核心库中的一个普通Ruby方法。它搜索
$LOAD\u路径
。不多不少,谢谢拉杰。是的,我已经算出了,但你的答案是正确的。似乎添加了lib,但没有添加lib的子文件夹,因此子文件夹中的任何内容都需要基于lib的路径和文件名。我犯了一个愚蠢的错误。我不知道这是否是一个愚蠢的错误。我认为这是一个出乎意料的奇怪现象。仅仅说“包含lib和子文件夹中的所有文件”并没有什么好办法。