如何在rspec测试中包含lib目录

时间:2013-06-06 06:20:37

标签: ruby testing rspec rspec-rails

我在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

我似乎想要测试的文件没有加载。请告诉我哪里出错了,我应该在哪里进行更正。

4 个答案:

答案 0 :(得分:19)

在调用require之前,应手动更新spec_helper.rb中的LOAD PATH。尝试将其作为spec_helper.rb的第一行:

$: << '../lib'

$LOAD_PATH << '../lib'

$:$LOAD_PATH)的别名

答案 1 :(得分:7)

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

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

这些选项描述如下:

  

-I PATH

     

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

     

-r, - 需要PATH

     

需要一个文件。

答案 2 :(得分:6)

我使用以下内容作为我的规格......取决于你的lib是哪个级别....

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

答案 3 :(得分:1)

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

找到这一行

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

取消注释它修复它是这样的:

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

它应该有用