Die*_*ngs 14 ruby rspec ruby-on-rails require ruby-1.9
我正在尝试将我的一个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
...
Run Code Online (Sandbox Code Playgroud)
lib看起来像这样:
# file lib/services/my_lib.rb
class MyLib
def self.do_something
...
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
我不知道是什么让Ruby 1.9无法找到lib.
Fro*_*ost 24
ruby 1.9中的加载路径与1.8中的加载路径完全不同.
您需要将项目的根目录添加到加载路径.
你可以通过像这样运行rspec来做到这一点:
rspec -I . ./spec/models/tipp_remember_spec.rb
Run Code Online (Sandbox Code Playgroud)
...或者手动将东西添加到你的负载路径中spec_helper.rb(把它放在你的顶部)spec_helper.rb
$:<< File.join(File.dirname(__FILE__), '..')
Run Code Online (Sandbox Code Playgroud)
我认为rspec默认情况下lib也会将您的本地目录添加到加载路径中,因此您可以按如下方式重写require行:
require 'services/my_lib'
Run Code Online (Sandbox Code Playgroud)
在RSpec 2.x中,lib目录会自动添加到加载路径中(请参阅RSpec-Core#get_started).
所以你可以require 'services/my_lib'在你的spec文件中使用.
| 归档时间: |
|
| 查看次数: |
15575 次 |
| 最近记录: |