1

我正在将 Rails 2.x 应用程序转换为 Rails 3.x。Rails 2.x 项目的规范目前全部通过。

然而,在将规范移至 Rails 3.x 应用程序后,规范消失了,无法找到目录SmsCommand::Base中定义的基类 ( ) 。Rails.root + '/lib'我试过用 just 运行规范rspec path_to_specrake specbundle exec rspec path_to_spec都无济于事。

我担心它可能与目录嵌套有关。举个例子:

/spec/models/sms_commands/accept_spec.rb

是以下规格:

/app/models/sms_commands/accept.rb

该类Accept继承自SmsCommand::Base其中包含在:

/lib/sms_command.rb

似乎 Rails 自动加载器没有针对规范发生,或者根本没有自动加载 /lib 目录。

的输出rake spec是:

/Users/xxx/.rvm/gems/ruby-1.9.2-p180@a_project/gems/rspec-core 2.5.1/lib/rspec/core/backward_compatibility.rb:20:
in `const_missing': uninitialized constant Object::SmsCommand (NameError)
from /Users/xxx/Projects/a_project/app/models/sms_commands/accept.rb:2:in `<top (required)>'

spec_helper的每个规范都需要以下相关行:(我试图强制目录中每个规范的require问题*.rblib

ENV["RAILS_ENV"] ||= 'test'
Dir[File.expand_path(File.join(File.dirname(__FILE__),'..', 'lib','**','*.rb'))].each {|f| require f}
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
#require 'spec/autorun'
require 'spec/rails'
4

1 回答 1

0

从阅读本文:

https://rails.lighthouseapp.com/projects/8994/tickets/5218-rails-3-rc-does-not-autoload-from-lib

...事实证明,默认情况下不会自动加载,无论出于何种原因,/lib实际上都没有警告。application.rb

添加

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

在我Application解决了这个问题。

于 2011-03-29T19:51:39.720 回答