【问题标题】:RSpec Can Only See Classes in the Root of my Lib DirectoryRSpec 只能在我的 Lib 目录的根目录中查看类
【发布时间】: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 你需要./

标签: ruby rspec sinatra specs


【解决方案1】:

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

require 'workers/class_not_found'

应该是正确的。

顺便说一句:你不require 上课,你require 文件

【讨论】:

  • 对不起。语义不好。添加路径不起作用,据我所知,RSpec 应该允许没有路径的文件名。
  • require 与 RSpec 无关。 require 是来自 Ruby 核心库的普通 Ruby 方法。它搜索$LOAD_PATH。不多也不少。
【解决方案2】:

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

你的'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' 中的需求被正确地看到和需求。

【讨论】:

  • 谢谢拉吉。是的,我已经解决了,但你的答案是正确的。似乎添加了 lib,但没有添加 lib 的子文件夹,因此子文件夹中的任何内容都需要基于 lib 的路径以及文件名。对我来说是一个愚蠢的错误。
  • 我不知道这是不是一个愚蠢的错误。我认为这是一个出乎意料的奇怪现象。没有好办法只说“包含 lib 和子文件夹中的所有文件”。
猜你喜欢
  • 2019-06-23
  • 2013-06-02
  • 2015-05-20
  • 2011-10-11
  • 2011-12-02
  • 1970-01-01
  • 2016-05-24
  • 2012-05-06
  • 1970-01-01
相关资源
最近更新 更多