Ruby需要'文件'和相对位置

时间:2010-07-15 17:35:17

标签: ruby require ruby-1.8 ruby-1.8.7 ruby-1.9.1

所以我正在编写一些rspec测试,但由于缺乏对Ruby的理解,我感到很尴尬。

我的文件结构如下所示:

  • GUI_Tests / Tests / test_spec.rb
  • GUI_Tests / windows_gui.rb
  • GUI_Tests / upload_tool.rb

当我运行test_spec.rb文件的规范时,我要求包含upload_tool文件,如下所示:

spec -r ../upload_tool -fs test_spec.rb

然后,upload_tool需要windows_gui.rb,如下所示:

require '../windows_gui'

我的问题是,为什么我必须引用相对于test_spec.rb的windows_gui.rb(需要../)而不是upload_tool.rb?这对我来说是错误的,我想要在测试规范的上下文中使用upload_tool.rb,这意味着每次都要更改要求。

显然我遗漏了一些东西,但是如果我没有引用相对于测试规范,我会收到一个找不到错误的文件。

很抱歉在这里如此无知,但我空手而归。任何想法都赞赏。

BB

1 个答案:

答案 0 :(得分:20)

你没有。 require是相对于当前目录的,在您的情况下是GUI_Tests/Tests。如果你这样做了:

cd ..
spec -r upload_tool -fs Test/test_spec.rb

你必须使用它:

require 'windows_gui' # without '../'

解决该问题的最常见方法是使用File.dirname(__FILE__)

require File.join(File.dirname(__FILE__), '..', 'windows_gui')

注意:在Ruby 1.9.2中,要求更改它的默认值:Ruby: require vs require_relative - best practice to workaround running in both Ruby <1.9.2 and >=1.9.2