我在ruby app(非rails)中加载依赖性时遇到了麻烦。
其文件夹树
项目
-> 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' ;:无法加载此类文件 - file1 (LoadError)
我尝试添加" require_relative"到我的规范中的file1仍然无法正常工作。
我很感激有人给我一些指示
答案 0 :(得分:4)
将您的require './file1'
module File2
end
更改为:
{{1}}
答案 1 :(得分: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>'
但是在file2.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
(或者只是设置您的环境变量等)
注意,使用
require './file1'
相对于工作目录是否需要,因此它不等同于
require_relative 'file1'
答案 2 :(得分:1)
看看rspec如何在rails中引用这个东西,我通过添加
来解决它require File.expand_path("path", __FILE__)
而不是使用require_relative