4

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

no such file to load -- test (LoadError)

似乎我的规范可以嵌​​套在文件夹结构中,但是当我尝试需要嵌套文件夹中的类时(例如lib/workers/conversion_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_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 "lib/workers/class_not_found.rb" # Fails
4

2 回答 2

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'正确查看和需要您的需求。

于 2013-01-25T22:57:33.413 回答
0

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

require 'workers/class_not_found'

会是正确的。

顺便说一句:你不require上课,你require 归档.

于 2013-01-24T13:41:11.213 回答