Ruby RSpec只能在我的Lib目录的根目录中看到类
RSpec(2.12.2)让我很难过。如果我想引用某个规范中的类,而该类不在我的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
/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和子文件夹中的所有文件”并没有什么好办法。