Ruby требует "файл" и относительное местоположение
Поэтому я пишу несколько тестов rspec и смущаюсь отсутствием понимания Ruby.
У меня есть структура файла, которая выглядит следующим образом:
- GUI_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 вне контекста тестовых спецификаций, что означает изменение требований каждый раз.
Понятно, что я что-то упускаю, но если я не ссылаюсь на тестовую спецификацию, я получаю файл not found.
Извините за то, что я так невежественен, но я подхожу с пустыми руками. Любые мысли приветствуются.
BB
1 ответ
Вы не 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 require изменен, его значения по умолчанию: Ruby: require vs require_relative - передовой метод для обхода проблемы в обоих Ruby <1.9.2 и>=1.9.2