我正在将 Rails 2.x 应用程序转换为 Rails 3.x。Rails 2.x 项目的规范目前全部通过。
然而,在将规范移至 Rails 3.x 应用程序后,规范消失了,无法找到目录SmsCommand::Base
中定义的基类 ( ) 。Rails.root + '/lib'
我试过用 just 运行规范rspec path_to_spec
,rake spec
但bundle 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
问题*.rb
。lib
)
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'