2015-08-30 2 views
3

У меня возникли проблемы с загрузкой зависимостей в приложении ruby ​​(без рельсов).`require ': невозможно загрузить такой файл - Ruby + Rspec

Его дерево папок

проект

-> bin 
    -> lib 
    -> modules 
     -> file1.rb 
     -> file2.rb 
    -> spec 
    -> file2_spec.rb 

Мой файл

require 'file1' 

module File2 
end 

Моя спецификация

require 'spec_helper' 
require_relative '../lib/modules/file2' 

В сообщении об ошибке он показывает

RSpec спецификации/query_util_spec.rb /home/gustavo/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `требуют ': не может загрузить такой файл - file1 (LoadError)

Я попытался добавить «require_relative» в файл1 в моей спецификации и по-прежнему не работает.

Я буду благодарен кто-то дать мне некоторые направления

ответ

1

Глядя, как RSpec сделать это ссылочный материал в рельсах, я решил, что путем добавления

require File.expand_path("path", __FILE__) 

вместо использования require_relative

4

изменить вашу File2.rb к этому:

require './file1' 

module File2 
end 
+0

попробовал это и did'nt работал –

+0

какая ошибка m essage? тоже самое? –

+0

Он просто не принял требование «./file1» и сломал не только тест, но и программу. Я решил это, добавив require = File.expand_path ('path', File.dirname (__ FILE__)). спасибо за ваши усилия, при поддержке, дайте мне указания. –

2

Когда вы сказали "I tried to add "require_relative" to file1 in my spec and still does not work" вы говорили о file2_spec.rb?

Кажется, что у вас нет требуемого_релятивного файла File2?

С ниже, я получаю то же самое, как вы:

$ find -type f ./lib/modules/file1.rb ./lib/modules/file2.rb ./spec/file2_spec.rb $ cat lib/modules/file1.rb puts "hello world" $ cat lib/modules/file2.rb require 'file1' $ cat spec/file2_spec.rb require_relative '../lib/modules/file2' $ ruby spec/file2_spec.rb /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- file1 (LoadError) from /opt/chefdk/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require' from /apps/stackoverflow/lib/modules/file2.rb:1:in `<top (required)>' from spec/file2_spec.rb:1:in `require_relative' from spec/file2_spec.rb:1:in `<main>'

Но с относительно включения в file2.гь, она отлично работает:

$ cat spec/file2_spec.rb require_relative '../lib/modules/file2' $ cat lib/modules/file2.rb require_relative 'file1' $ ruby spec/file2_spec.rb hello world

Это сказало, если вы хотите создать библиотеку, то это, вероятно, стоит настройки вашего LOAD_PATH правильно, так что вы не должны делать это везде:

$ cat spec/file2_spec.rb $LOAD_PATH.unshift("{File.dirname(__FILE__)}/../lib/modules") require 'file2' $ cat lib/modules/file2.rb require 'file1' $ ruby spec/file2_spec.rb hello world

(или просто настроить ваш переменные среды и т.д.)

NB, использование

require './file1'

делает требует относительно рабочего каталога, так что это не эквивалентно

require_relative 'file1'

Смежные вопросы