【发布时间】:2013-01-08 05:06:54
【问题描述】:
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:
require "lib/workers/class_not_found.rb" # Fails
【问题讨论】:
-
所以你创建一个名为
spec/lib/workers/class_not_found_spec.rb的文件,写入require 'spec_helper'; module Workers; describe ClassNotFound do ... end; end,rspec找不到源? -
@ProGNOMmers 我已经更新了这个问题。希望现在一切都清楚了。
-
你的项目是 Rails 应用吗?如果是,您应该将
spec/workers移动到spec/lib/workers -
@ProGNOMmers 这是一个 Sinatra 应用程序。
-
尝试
require "./lib/workers/class_not_found.rb"in ruby > 1.9 你需要./