RSpec只能查看我的Lib目录的根目录中的类

时间:2013-01-24 12:29:36

标签: ruby rspec sinatra specs

RSpec(2.12.2)让我很难过。如果我想在我的一个规范中引用一个类,并且该类不在我的/lib目录的根目录中,则会引发错误:

no such file to load -- test (LoadError)

似乎我的规范可以嵌​​套在文件夹结构中,但是当我尝试并且需要一个嵌套文件夹中的类时(例如lib/workers/conversion_worker.rb),我得到了这个错误。

我在所有规范中都使用了'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_PATH的路径):

$ rspec spec/workers/class_not_found_spec.rb -I /Path/to/project/*

所以似乎RSpec没有在lib下面添加任何东西。

我可以使用require_relative成功要求class_not_found.rb:

require_relative "../../lib/workers/class_not_found.rb" #Succeeds

但不使用require:

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

2 个答案:

答案 0 :(得分:7)

我不知道您是否有自己喜欢的答案,但似乎您并没有正确要求您的文件。

您的'lib/class_found.rb'文件应该包含所有库文件,因此它应该类似于:

require 'workers/class_not_found'

并且您的spec_helper.rb将需要lib文件夹中的主文件,因此它应该类似于:

require 'class_found'

rspec在运行时自动加载'spec/spec_helper.rb',它还会自动将'lib'文件夹添加到其LOAD_PATH,以便正确查看并要求'lib/class_found.rb'中的您的要求。

答案 1 :(得分:0)

根据您的目录树,文件class_not_found.rb位于子目录workers中。您忘记将路径添加到require

require 'workers/class_not_found'

是正确的。

顺便说一句:您没有require个课程,require 个文件