【问题标题】:"uninitialized constant" when running RSpec tests with Rails 2.3.8 and Bundler使用 Rails 2.3.8 和 Bundler 运行 RSpec 测试时出现“未初始化的常量”
【发布时间】:2010-07-20 08:57:25
【问题描述】:

我刚刚更改了我的 Rails 2.3.8 项目以使用 Bundler 加载 gem,而不是默认的 Rails 2.3 加载机制。我关注了the official instructions,该网站在开发中运行良好。我使用 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。它不应该那样做,而且在开发模式下肯定不会那样做。我可以在我的 Gemfile 中注释掉 gem 'inherited_resources',站点仍然运行。直到我点击一个加载使用继承资源的控制器的操作,我才收到“未初始化的常量”错误。

为清楚起见,这是我的Gemfile and spec_helper.rb

【问题讨论】:

    标签: ruby-on-rails rubygems rspec bundler rvm


    【解决方案1】:

    甚至更老的问题,但我对 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 之后,问题就消失了。

    【讨论】:

    • 我同样解决了这样的问题。我在 rspec-rails 和上下文中添加了 :require => false 。上下文是在我的堆栈跟踪文件 active_support 之后。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您提及这一点。它可能对其他人有帮助,但对我没有帮助。我已经在使用 RSpec 1.3.2。我刚刚更新并再次尝试了我损坏的捆绑器分支 - 仍然是同样的错误。
    【解决方案3】:

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

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

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

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

    require 'spec/rails'
    

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多