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

Aka*_*wal 28 ruby testing rspec rspec-rails

lib在JRuby 1.7.4上测试我的gem包含一个目录时遇到了问题.

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

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

require 'spec_helper'

describe Vger::Resources::AccountManager do     
    .
    .
    end 
end
Run Code Online (Sandbox Code Playgroud)

我试图包含我想要测试的文件 spec_helper.rb

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

RSpec.configure do |config|
  # some (optional) config here
end
Run Code Online (Sandbox Code Playgroud)

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

NameError: uninitialized constant Vger::Resources
    const_missing at org/jruby/RubyModule.java:2631
Run Code Online (Sandbox Code Playgroud)

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

小智 19

Manually update your LOAD PATH in spec_helper.rb before calling require should do the trick. Try making this the first line of your spec_helper.rb:

$: << '../lib'
Run Code Online (Sandbox Code Playgroud)

or

$LOAD_PATH << '../lib'
Run Code Online (Sandbox Code Playgroud)

($: is an alias for $LOAD_PATH)

  • 考虑不使用`$:`这是非常神秘的,因为`$ LOAD_PATH`是非常冒犯的类型,所以你不妨只使用它.但是包含+1. (6认同)
  • $:&lt;&lt; File.expand_path(“ spec / lib”)`对我有用 (2认同)

Sla*_*nko 8

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

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

这些选项描述如下:

-I PATH

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

-r, - 需要PATH

需要一个文件.


小智 6

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

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


小智 1

我记得,RSpec 加载 Rails 环境,因此您只需添加到 application.rb 文件中的自动加载目录

找到这一行

# config.autoload_paths += %W(#{config.root}/extras)
Run Code Online (Sandbox Code Playgroud)

取消注释将其修复为如下所示:

config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)

它应该有效

  • 这不是一个 Rails 项目。这是我在 Rails 应用程序中使用的一个 gem。所以,我想这行不通 (8认同)