2013-05-23 3 views
0

У меня есть дерево проекта, как показано ниже:Требовать Ошибка в тесте на драгоценный камень

├── bin 
├── fpgrowth-ruby-0.0.1.gem 
├── fpgrowth-ruby.gemspec 
├── Gemfile 
├── Gemfile.lock 
├── lib 
│   ├── fpgrowth 
│   │   ├── fptree 
│   │   │   ├── builder 
│   │   │   │   ├── first_pass.rb 
│   │   │   │   └── second_pass.rb 
│   │   │   ├── fp_tree.rb 
│   │   │   └── node.rb 
│   │   ├── models 
│   │   │   └── transaction.rb 
│   │   └── ruby 
│   │    └── version.rb 
│   └── fpgrowth.rb 
├── LICENSE.txt 
├── Rakefile 
├── README.md 
└── test 
    └── tc_first_pass.rb 

В TestCase для first_pass я писал:

require 'test/unit' 
require "../lib/fpgrowth/fptree/builder/first_pass" 

Тогда я получаю это:

ruby test/tc_first_pass.rb 
/home/damien/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- ../lib/fpgrowth/fptree/builder/first_pass (LoadError) 
    from /home/damien/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from test/tc_first_pass.rb:2:in `<main>' 

Что-то не так, но я не знаю, что.

+0

вам необходимо включить расширение файла, как в 'требуется делать" ../ lib/fpgrowth/fptree/builder/first_pass.rb "?? –

+1

@sawa Пожалуйста, не снижайтесь в своем сообщении о фиксации. Не все на земле изучали английский язык в начальной школе Коннектикута. – Dam

+0

@Dam Я тоже. – sawa

ответ

1

Используйте флаг -I в командной строке ruby, чтобы указать требуемый путь во время выполнения.

от вашего верхнего уровня каталога

ruby -I lib test/tc_first_pass.rb 

выше говорит интерпретатор рубинового включить/LIB в пути загрузки только для этого исполнения.

Тогда для вашего требуют линии,

require 'fpgrowth/fptree/builder/first_pass' 

Для ювелирного дома, и организации вашего источника я предлагаю читать главы по организации вашего источника и распределения и упаковки вашего кода программирования Ruby, книги найти здесь: http://pragprog.com/book/ruby3/programming-ruby-1-9

1

Вы не можете запрашивать такие файлы, если не используете require_relative.

Запрет на то, что вам следует сделать, это изменить $LOAD_PATH, чтобы включить ../lib.

+0

Я должен использовать трюк $ LOAD_PATH для тестирования моего драгоценного камня. Или лучше построить la gem и потребовать его тогда в моих тестах? – Dam

+0

Возможно, вы захотите настроить свой '$ LOAD_PATH' для тестирования и позволить Rubygems обрабатывать настройку, когда установлен ваш gem. Это делает вашу тестовую среду похожей на то, каково это при развертывании. – tadman

+0

Да, я согласен с тобой. – Dam

0

Вы можете использовать класс-методы File, чтобы помочь вам.

Прежде всего, нужно начинать с каталога, не относящегося к cwd, но относительно файла, требующего требования. Возможно, они не совпадают.

require File.dirname(__FILE__) + "../lib/fpgrowth/fptree/builder/first_pass" 

Это, однако, не очень компактен и может быть очищен с помощью join класс-метод:

require File.join(File.dirname(__FILE__), '..', 'lib', 'fpgrowth', 'fptree', 'builder', 'first_pass') 

Но вы, вероятно, найти себя, добавив это повсюду, не так ли? В этом случае, рассмотреть вопрос о добавлении помощника в fpgrowth.rb:

def self.root 
    Pathname.new(File.expand_path(File.dirname(__FILE__))) 
end 

Теперь вы можете использовать этот хелпер повсюду:

FpGrowth.root #=> "/absolute/path/to/fpgrowth/lib" 
FpGrowth.root.join("fpgrowth", "fbtree", "builder") #=> "/absolute/path/to/fpgrowth/lib/fpbrowth/fbtree/builder" 
Смежные вопросы