От RSpec 1.x до RSpec 2.x (от Rails 2.x до Rails 3.x) - PullRequest
1 голос
/ 29 марта 2011

Я нахожусь в процессе преобразования приложения Rails 2.x в Rails 3.x.Спецификации проекта Rails 2.x выполняются со всеми проходящими в настоящее время.

Однако после перемещения спецификаций в приложение Rails 3.x спецификации умирают, не в состоянии найти базовый класс (SmsCommand::Base), определенный в *Каталог 1004 *.Я попытался запустить спецификации только с 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
* 1020.* Кажется, что автозагрузчик 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)>'

Myspec_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'

1 Ответ

0 голосов
/ 29 марта 2011

Прочитав это:

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 исправило проблему.

...