3

我刚刚更改了我的 Rails 2.3.8 项目以使用 Bundler 加载 gem,而不是默认的 Rails 2.3 加载机制。我遵循了官方的说明,该网站在开发中运行良好。我使用 RVM 进行 gem 管理,并为应用程序加载了特定的 gemset。

但是,我的 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 gem 无关——我认为此时根本没有加载 gem,而 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

4

3 回答 3

2

甚至更老的问题,但我对 Bundler 1.0.3、Rspec-Rails 1.3.3 和 Rails 2.3.8 也有同样的问题,并且能够将其归结为显着_rails。Remarkable-Rails 似乎在环境运行初始化程序之前加载 rspec/rails。

在 Gemfile 中将 :require => nil 添加到它并在 spec_helper 中手动要求它之后,在需要 rails-environment 之后,问题就消失了。

于 2010-10-25T16:57:41.517 回答
1

为了解决这个问题,我通过 Gemfile 从以下位置更改:

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

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

并将以下内容添加到我的规范助手中

require 'spec/rails'
于 2011-03-28T00:58:13.930 回答
1

我意识到这是一个老问题,但我刚刚遇到了同样的问题。

我有我的应用程序所需的 1.3.0 版本的 rspec 和 rspec-rails。查看rspec-rails 更改日志,我注意到 1.3.0 之后有一些错误修复。将 rspec-rails 升级到 1.3.2 为我修复了所有问题。

于 2010-08-06T16:23:15.357 回答