【问题标题】:`require': cannot load such file - Ruby + Rspec`require':无法加载这样的文件 - Ruby + Rspec
【发布时间】:2015-11-24 21:19:27
【问题描述】:

我在 ruby​​ 应用程序(非 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 规范/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(加载错误)

我尝试在我的规范中将“require_relative”添加到 file1,但仍然无法正常工作。

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

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    查看 rspec 如何在 rails 中做这些参考资料,我通过添加解决了它

    require File.expand_path("path", __FILE__)
    

    而不是使用 require_relative

    【讨论】:

      【解决方案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'

      【讨论】:

        【解决方案3】:

        将您的 File2.rb 更改为:

        require './file1'
        
        module File2
        end
        

        【讨论】:

        • 它只是不接受 require './file1' 并且不仅破坏了测试而且破坏了程序本身。我通过添加 require = File.expand_path('path', File.dirname(FILE)) 解决了这个问题。感谢您的努力,通过给我指示投票。
        猜你喜欢
        • 1970-01-01
        • 2015-03-25
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        相关资源
        最近更新 更多