【发布时间】: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 中。