«неинициализированная константа» при запуске тестов RSpec с Rails 2.3.8 и Bundler - PullRequest
3 голосов
/ 20 июля 2010

Я только что изменил свой проект Rails 2.3.8 для загрузки гемов, используя Bundler, а не механизм загрузки Rails 2.3 по умолчанию. Я следовал официальным инструкциям и сайт отлично работает в разработке. Я использую RVM для управления драгоценными камнями, и для приложения загружен определенный драгоценный набор.

Однако мой набор тестов RSpec не может быть запущен. Я попытался запустить как весь набор, так и отдельные тесты, используя различные команды:

autospec # My usual way of running tests
rake spec
spec .
spec spec/models/comment_spec.rb # Trying a single spec file in isolation
ruby spec/models/comment_spec.rb

Я также попытался запустить их все с префиксом bundle exec. Все возвращает ту же ошибку:

/Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:440:in `load_missing_constant': uninitialized constant InheritedResources::Base (NameError)
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:in `const_missing_not_from_s3_library'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing'
    from /Users/casper/Projects/cf/darebusters/app/controllers/admin/base_controller.rb:1
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:158:in `require'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:158:in `require'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:265:in `require_or_load'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:224:in `depend_on'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:136:in `require_dependency'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:414:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:413:in `each'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:413:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:411:in `each'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:411:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:197:in `process'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:113:in `send'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:113:in `run'
    from /Users/casper/Projects/cf/darebusters/config/environment.rb:9
    from /Users/casper/Projects/cf/darebusters/spec/spec_helper.rb:5:in `require'
    from /Users/casper/Projects/cf/darebusters/spec/spec_helper.rb:5
    from spec/models/comment_spec.rb:1:in `require'
    from spec/models/comment_spec.rb:1

Я почти уверен, что проблема не связана с гемом Inherited Resources - я думаю, что в этот момент гемы вообще не загружаются, и Inherited Resources просто оказывается первой необходимой.

Меня сбивает с толку то, что /activesupport-2.3.8/lib/active_support/dependencies.rb:158 требует /app/controllers/admin/base_controller на этапе инициализации. Он не должен этого делать, и, безусловно, не делает этого в режиме разработки. Я могу прокомментировать gem 'inherited_resources' в моем Gemfile, и сайт все еще работает. Пока я не выполню действие, которое загружает контроллер, использующий унаследованные ресурсы, я получаю ошибку «неинициализированная константа».

Для ясности, вот мои Gemfile и spec_helper.rb .

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Еще более старый вопрос, но у меня была та же проблема с Bundler 1.0.3, Rspec-Rails 1.3.3 и Rails 2.3.8, и я смог свести его к замечательному_рейлу. Кажется, что Remarkable-Rails загружает rspec / rails до запуска инициализатора средой.

После добавления: require => nil к нему в Gemfile и требования его вручную в spec_helper ПОСЛЕ того, как требуется rails-environment, проблема исчезла.

1 голос
/ 28 марта 2011

Чтобы исправить эту проблему, я изменил Gemfile с:

gem 'rspec-rails', '~> 1.3.2', :require => 'spec/rails'

до

gem 'rspec-rails', '~> 1.3.2'

и добавил следующее в мой помощник спецификаций

require 'spec/rails'
1 голос
/ 06 августа 2010

Я понимаю, что это старый вопрос, но я только что столкнулся с той же проблемой.

У меня была версия 1.3.0 rspec и rspec-rails, требуемая моим приложением. Глядя на список изменений rspec-rails , я заметил, что после 1.3.0 было исправлено несколько ошибок. Обновление rspec-rails до 1.3.2 исправило все для меня.

...