`require':无法加载这样的文件 - Ruby + Rspec

时间:2015-08-30 20:57:36

标签: ruby rspec

我在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仍然无法正常工作。

我很感激有人给我一些指示

3 个答案:

答案 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