Я читаю "Программирование на Ruby 1.9".На странице 208 (в разделе «Куда ставить тесты») книга имеет код, организованный как
roman
lib/
roman.rb
other files...
test/
test_roman.rb
other_tests...
other stuff
, и спрашивает, как мы узнаем наш файл test_roman.rb
о файле roman.rb
.
В нем говорится, что один из вариантов, который не работает, состоит в том, чтобы встроить путь в require
операторов в тестовом коде:
# in test_roman.rb
require 'test/unit'
require '../lib/roman'
Вместо этого он говорит, что лучшее решение для всехдругие компоненты приложения предполагают, что каталог верхнего уровня приложения находится в пути загрузки Ruby, так что тестовый код будет иметь
# in test_roman.rb
require 'test/unit'
require '/lib/roman'
, и мы будем запускать тесты, вызывая ruby -I path/to/app path/to/app/test/test_roman.rb
.
Мой вопрос : действительно ли это лучший способ?Кажется, что
- Если мы просто заменим
require '../lib/roman'
в первом варианте на require_relative '../lib/roman'
, все будет работать нормально. - Предположение во втором варианте (что все компоненты имеюткаталог верхнего уровня в пути загрузки Ruby) работает только потому, что мы передаем аргумент
-I path/to/app
, который выглядит немного грязно.
Правильно ли, что замена require
на require_relative
исправляет всепроблемы?Есть ли причина предпочитать второй вариант?