【问题标题】:How to correctly use require? - ruby如何正确使用require? - 红宝石
【发布时间】:2017-04-17 14:53:19
【问题描述】:

我有一个我一直在做的小项目。 在这个项目中,我一直在使用 rspec 来测试类,所以我的项目文件夹的结构是这样的:

.
+--lib
|   +-- # bunch of classes 
|
+--spec
|   +-- # bunch of tests

位于项目根目录中,如果我运行rspec,所有测试都运行正确。

但是,如果我通过命令行运行主脚本,例如:ruby lib/main.rb,则会收到此错误:

`require': cannot load such file

如果我将所有要求更改为 ./lib/class_name 它可以工作,但 rspec 停止工作。

这样做的正确方法是什么?

【问题讨论】:

  • 对,没有 rails 标签。在这种情况下,通用答案将是“设置您的$LOAD_PATH,以便所有需要的目录都在那里”。这就是require 的工作原理。它在你的 LOAD_PATH 的每个目录中搜索东西
  • 也许你应该使用require_relative
  • 我认为最好的解决方案类似于这里所做的 github.com/google/google-api-ruby-client/blob/master/spec/… 他们只是将所需的路径附加到 $LOAD_PATH 然后在测试中“需要”这个助手。据我所知,如果您输入的是确切路径,require_relative 会加载与 require 完全相同的路径。
  • 你能举出具体的例子吗?我从来没有遇到过这个问题,所以我无法想象它是如何不起作用的。主脚本也应该在项目根文件夹中,而不是在 lib 中。

标签: ruby rspec require


【解决方案1】:

所以,我听取了 Sergio Tulentsev 的建议并设置了 $LOAD_PATH,这解决了我的问题!

为此,我在主脚本的开头添加了以下代码:

$LOAD_PATH.unshift(File.dirname(__FILE__))

此代码将当前文件目录添加到$LOAD_PATH的开头(这是一个数组,需要用于挂载所需文件路径并加载它们)。

换句话说,这使我的主脚本能够将lib 添加到$LOAD_PATH 并修复需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多