尝试运行 rspec 时,我得到“未初始化的常量 ActiveModel”

Posted

技术标签:

【中文标题】尝试运行 rspec 时,我得到“未初始化的常量 ActiveModel”【英文标题】:When trying to run rspec, I get "uninitialized constant ActiveModel" 【发布时间】:2011-12-24 16:45:12 【问题描述】:

当我运行 rspec spec 时,我得到以下信息:

/usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.7.0/lib/rspec/rails/extensions/active_record/base.rb:26:in `': 未初始化的常量 ActiveModel (NameError ) 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.7.0/lib/rspec/rails/extensions.rb:1:in `require' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.7.0/lib/rspec/rails/extensions.rb:1:in `' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.7.0/lib/rspec/rails.rb:8:in `require' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.7.0/lib/rspec/rails.rb:8:in `' 来自 /Users/noahc/Dropbox/perfect_setup/spec/spec_helper.rb:4:in `require' 来自 /Users/noahc/Dropbox/perfect_setup/spec/spec_helper.rb:4:in `' 来自 /Users/noahc/Dropbox/perfect_setup/spec/controllers/pages_controller_spec.rb:1:in `require' 来自 /Users/noahc/Dropbox/perfect_setup/spec/controllers/pages_controller_spec.rb:1:in `' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:459:in `load' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:459:in `block in load_spec_files' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:459:in `map' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:459:in `load_spec_files' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/command_line.rb:18:in `run' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:80:in `run_in_process' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:69:in `run' 来自 /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:10:in `block in autorun'

我的 spec_helper.rb 看起来像这样:

ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require 'rspec/rails'
require 'rspec/autorun'
require 'spork'

Spork.prefork do
  ENV['RAILS_ENV'] ||= 'test'
  require File.expand_path('../../config/environment', __FILE__)
  require 'rspec/rails'

  RSpec.configure do |config|
    config.mock_with :rspec
    config.fixture_path = "#Rails.root/spec/fixtures"
    config.use_transactional_fixtures = true

    ActiveSupport::Dependencies.clear
  end
end

Spork.each_run do
  load "#Rails.root/config/routes.rb"
  Dir["#Rails.root/app/**/*.rb"].each |f| load f
end

Dir[Rails.root.join("spec/support/**/*.rb")].each |f| require f

RSpec.configure do |config|
  config.mock_with :rspec
  config.fixture_path = "#::Rails.root/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
end

Dir[Rails.root.join('spec/support/**/*.rb')].each|f| require f

如果我删除 pages_controller_spec 文件,错误就会消失。但我要运行的规格为零。

当我遇到这样简单的事情时,错误就会返回:

require 'spec_helper'

describe PagesController do
  it "should do something..."
end

另外,如果我添加任何测试,无论我在哪里得到相同的错误。

我可以尝试其他的任何线索吗?

【问题讨论】:

你试过bundle exec guard start吗? @topek 导致了同样的错误。 【参考方案1】:

你为什么要运行rspec spec?典型的运行是rake spec

试试bundle exec rspec specbundle exec rake spec

如果这不起作用,请尝试查看您的其他环境是否有问题 - 尝试 bundle exec rails consolebundle exec rails server

还有一件事要检查,您的项目文件中的 .rspec~/.rspec 是否有什么奇怪的地方?

【讨论】:

我在一个新项目中重新设置了整个 rails 项目并修复了它。 “rspec 规范”来自 MH 的 Rails 教程。 此问题是否与此问题相关:devnet.jetbrains.net/message/… ? 我遇到了同样的问题。 @NoahClark,您所说的“我在一个新项目中重新设置了整个 Rails 项目是什么意思?您是否创建了一个新项目并一个一个地传输文件直到它工作? @Zyren 是的,这可能是我不确定的,因为已经有几年了。可能需要检查您的模型,因为这似乎是问题所在。 我知道它是什么。我的 spec_helper 中有一条重复的行,来自复制/粘贴的东西,它导致了那个错误。【参考方案2】:

在调试相同的症状时发现了这个线程。这是错误的另一个原因:我运行了

rspec --init

但运行失败

rails generate rspec:install

做后者解决了这个问题。

【讨论】:

同样,我运行了 rspec --init,但不是 rails generate rspec:install。 Rails 生成器在规范助手中包含 Rails.root。【参考方案3】:

就我而言

  gem "spork-rails", "~> 4.0.0"

./Gemfile 中丢失。

【讨论】:

你也必须添加`gem 'spork', '~> 1.0.0rc4'`到你的gemfile,不管SporkRails说什么。 SporkRails 将不会自行找到它。

以上是关于尝试运行 rspec 时,我得到“未初始化的常量 ActiveModel”的主要内容,如果未能解决你的问题,请参考以下文章

Rspec中未初始化的常量NameError

Rspec 没有看到我的模型类。未初始化的常量错误

RSpec - 未初始化的常量,例如double

为什么我在运行webrick服务器时会得到未初始化的常量设计名称错误?

困惑 - spec_helper.rb:94:在` ':未初始化的常量Shoulda(NameError)

运行规范命令时未初始化的常量 Spec::Rails (NameError)