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 ответ

Решение

Вы не requires относительно текущего каталога, который в вашем случае был 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

Другие вопросы по тегам