2015-08-30 51 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 spec/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`require':can not加載這樣的文件 - file1(LoadError)

我試圖在我的規範中添加「require_relative」到file1,但仍然不起作用。

我會感激有人給我一些方向

回答

1

尋找如何RSpec的做軌道此參考的東西,我解決它通過添加

require File.expand_path("path", __FILE__) 

而不是使用require_relative

4

更改File2.rb這樣:

require './file1' 

module File2 
end 
+0

試過這個並沒有工作 –

+0

什麼是錯誤m essage?一樣? –

+0

它只是不接受要求'./file1',不僅打破了測試,而且打破了程序本身。 我解決了它,添加require = File.expand_path('path',File.dirname(__ FILE__))。 感謝您的努力,upvoted給我的方向。 –

2

當你說"I tried to add "require_relative" to file1 in my spec and still does not work"是你在說什麼file2_spec.rb?

它看起來像你沒有在File2中require_relative?

具有以下,我得到和你一樣:

$ 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>'

但隨着相對包括文件2。RB,它工作正常:

$ 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'

相關問題