Подтвердить что ты не робот

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

Итак, я пишу некоторые тесты 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 из контекста тестовых спецификаций, что означает, что каждый раз требуется изменение.

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

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

ВВ

4b9b3361

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