在RSpec中需要lib,Ruby 1.9.2带来“没有这样的文件加载”
我正在尝试将我的一个Rails项目升级到Ruby 1.9.2
。 一切都很顺利,但一次RSpec测试破裂了。 在这个测试中我require
一个Ruby lib
:
# file spec/models/my_lib_spec.rb require 'spec_helper' require 'lib/services/my_lib' describe "MyLib" do it "should do something" do ...
lib看起来像这样:
# file lib/services/my_lib.rb class MyLib def self.do_something ...
在Ruby 1.8.7(REE)中,测试运行良好:
$ ruby -v ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby Enterprise Edition 2011.03 $ rspec ./spec/models/my_lib_spec.rb .. Finished in 1.4 seconds 2 examples, 0 failures
在Ruby 1.9.2中,我得到一个错误, no such file to load
:
$ ruby -v ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] $ rspec ./spec/models/my_lib_spec.rb /Users/tmangner/.rvm/gems/ruby-1.9.2-p290@madgoal/gems/activesupport- 3.2.2/lib/active_support/dependencies.rb:251:in `require': no such file to load -- lib/services/my_lib (LoadError)
我不知道是什么让Ruby 1.9无法找到lib。
ruby 1.9中的加载路径与1.8中的加载路径完全不同。
您需要将项目的根目录添加到加载路径。
你可以通过像这样运行rspec来做到这一点:
rspec -I . ./spec/models/tipp_remember_spec.rb
…或者通过手动将内容添加到spec_helper.rb
的加载路径(将其放在spec_helper.rb
的顶部)
$:<< File.join(File.dirname(__FILE__), '..')
我认为默认情况下rspec也会将您的本地lib
目录添加到加载路径中,因此您可以按如下方式重写require行:
require 'services/my_lib'
在RSpec 2.x中, lib
目录会自动添加到加载路径中(请参阅RSpec-Core#get_started )。
因此,您只需在spec文件中使用require 'services/my_lib'
。
如果您的规范位于spec/models/my_lib_spec.rb
并且您想测试lib/services/my_lib.rb
,那么只需告诉规范如何获取lib文件
require 'spec_helper' require_relative '../../lib/services/my_lib' describe "MyLib" do it "should do something" do
最后注意事项:由于您包含了spec_helper,因此通常不必为依赖项提供所有路径,因为Rails应该为您加载所有这些路径。
尝试手动定义路径
$LOAD_PATH << './lib/services/'
然后像这样添加库
require 'my_lib.rb'