【问题标题】:How to include lib directory in rspec tests如何在 rspec 测试中包含 lib 目录
【发布时间】:2013-06-02 01:00:52
【问题描述】:

我在 JRuby 1.7.4 上测试包含 lib 目录的 gem 时遇到问题。

我想测试一个位于lib/vger/resources/account_manager.rb的文件

我的规范文件在spec/vger/resources/account_manager_spec.rb

require 'spec_helper'

describe Vger::Resources::AccountManager do     
    .
    .
    end 
end

我正在尝试在spec_helper.rb 中包含我要测试的文件

require 'rubygems'
require 'bundler/setup'
require 'vger/resources/account_manager'
require 'vger'

RSpec.configure do |config|
  # some (optional) config here
end

在通过命令rspec spec/vger/resources/account_manager_spec.rb 运行测试时,出现此错误:

NameError: uninitialized constant Vger::Resources
    const_missing at org/jruby/RubyModule.java:2631

我想测试的文件似乎没有被加载。请告诉我哪里出了问题以及我应该在哪里进行更正。

【问题讨论】:

  • 尝试使用require_relative 和从spec_helper.rb 所在目录到lib 目录中资源的路径。类似require_relative "../lib/vger" 而不是require "vger" ant 等。
  • @YevgeniyAnfilofyev 它似乎不起作用。我试过 require_relative '../lib/vger/' 还 require_relative '../lib/vger/resources/' 并删除了 requre 'Vger' 和 require "vger/resources/account_manager"

标签: ruby testing rspec rspec-rails


【解决方案1】:

在调用 require 之前手动更新您在 spec_helper.rb 中的 LOAD PATH 应该可以解决问题。尝试将此作为您的 spec_helper.rb 的第一行:

$: << '../lib'

或

$LOAD_PATH << '../lib'

($: 是$LOAD_PATH 的别名)

【讨论】:

  • 我试过了。 /home/...../work/vger/lib 似乎正在加载,但仍然出现相同的错误
  • 考虑不使用$: 它非常神秘,因为$LOAD_PATH 是哦,所以你可以直接使用它来代替。但是 +1 包含在内。
【解决方案2】:

您可以将以下行添加到应用根目录中的 .rspec 文件中: -I lib

也可以包含文件: -r lib/api.rb

这些选项描述如下:

-I 路径

指定要添加到 $LOAD_PATH 的 PATH(可以多次使用)。

-r, --require 路径

需要一个文件。

【讨论】:

    【解决方案3】:

    我将以下内容用于我的规格...取决于您的库是哪个级别...

    require_relative '../../lib/module'

    【讨论】:

    • 您可能希望通过更多细节来改进您的答案。其中一个 cmets 包含更多信息。
    【解决方案4】:

    RSpec 加载 rails 环境,我记得,所以你只需要添加到 application.rb 文件中的自动加载目录

    找到这一行

    # config.autoload_paths += %W(#{config.root}/extras)
    

    取消注释将其修复为:

    config.autoload_paths += %W(#{config.root}/lib)
    

    它应该可以工作

    【讨论】:

    • 这不是一个 Rails 项目。这是我在 rails 应用程序中使用的 gem。所以,我想它不会工作
    • 我认为这将递归地自动加载路径?那么例如/lib/tasks下的任何rake任务也会被加载?
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2017-05-05
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多