Ruby требует 'файла' и относительного местоположения

Таким образом, я пишу некоторые тесты 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'

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

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

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

BB

19
задан Michael Durrant 26 August 2012 в 14:16
поделиться

1 ответ

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

20
ответ дан 30 November 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: