Таким образом, я пишу некоторые тесты rspec, и я смущен в моем отсутствии понимания Ruby.
У меня есть файловая структура, которая похожа на следующее:
когда я выполняю спецификацию для 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
Не знаете. 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