Je suis en train de convertir une application Rails 2.x en Rails 3.x. Les spécifications du projet Rails 2.x s'exécutent avec tous les passages actuellement.RSpec 1.x vers RSpec 2.x (Rails 2.x vers Rails 3.x)
Toutefois, après avoir déplacé les spécifications vers l'application Rails 3.x, les spécifications sont supprimées, ne trouvant pas de classe de base (SmsCommand::Base
) définie dans le répertoire Rails.root + '/lib'
. J'ai essayé d'exécuter les spécifications avec seulement rspec path_to_spec
, rake spec
et bundle exec rspec path_to_spec
en vain.
Je suis préoccupé par le fait qu'il peut s'agir de l'imbrication de répertoire. A titre d'exemple:
/spec/models/sms_commands/accept_spec.rb
est la spécification pour:
/app/models/sms_commands/accept.rb
La classe Accept
hérite de SmsCommand::Base
qui est contenu à:
/lib/sms_command.rb
Il semble que les rails autoloader n » t se passe pour specs ou c'est juste ne pas autoloading le répertoire/lib du tout.
La sortie de rake spec
est:
/Users/xxx/.rvm/gems/[email protected]_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)>'
Mon spec_helper
qui est requis par chaque spécification a les lignes pertinentes suivantes: (j'ai essayé de forcer la question avec le require
manuel pour chaque *.rb
dans le répertoire 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'