Ruby требует «файл» и относительное местоположение - PullRequest
19 голосов
/ 15 июля 2010

Итак, я пишу несколько тестов rspec и смущаюсь отсутствием понимания Ruby.

У меня есть файловая структура, которая выглядит следующим образом:

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

, когда я запускаю spec для файла test_spec.rb, мне требуетсяфайл upload_tool должен быть включен примерно так:

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

Затем upload_tool требует windows_gui.rb, вот так:

require '../windows_gui'

Мой вопрос: почему я должен ссылаться на windows_gui?.rb относительно test_spec.rb (требующий ../), а не upload_tool.rb?Мне кажется, что это неправильно, я хочу использовать upload_tool.rb вне контекста тестовых спецификаций, что означает изменение требований каждый раз.

Я явно что-то упускаю, но если я неt ссылка относительно спецификации теста Я получаю сообщение об ошибке "файл не найден".

Извините за то, что я так невежественен, но я подхожу с пустыми руками.Любые мысли приветствуются.

BB

1 Ответ

20 голосов
/ 15 июля 2010

Ты не. require s относительно текущего каталога, который в вашем случае был 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: требует vs require_relative - рекомендуется использовать обходной путь для Ruby <1.9.2 и> = 1.9.2

...