【问题标题】:rspec testing throws Uninitialized constant Rails (NameError)rspec 测试抛出未初始化的常量 Rails (NameError)
【发布时间】:2013-11-10 14:52:03
【问题描述】:

请原谅 StackOverflow 上这篇(我的第一篇)帖子中的任何不足之处。我是 Ruby on Rails 的新手。我正在关注Rails Tutorial。我花了很多不成功的时间咨询其他线程,讨论我在这个问题中提出的相同名称错误。

我尝试像这样运行 rspec 测试:$bundle exec rspec spec/models/user_spec.rb 抛出现在臭名昭著的错误:`': uninitialized constant Rails (NameError)

如果我需要提供更多信息以便让事情顺利进行,请告诉我。

这是我的 gemfile:

source 'https://rubygems.org'  
ruby '2.0.0'  
    #ruby-gemset=railstutorial_rails_4_0  

gem 'rails', '4.0.0'  
gem 'bootstrap-sass', '2.3.2.0'  
gem 'bcrypt-ruby', '3.0.1'  
gem 'faker', '1.1.2'  
gem 'will_paginate', '3.0.4'  
gem 'bootstrap-will_paginate', '0.0.9'  

group :development, :test do
  gem 'sqlite3', '1.3.8'  
  gem 'rspec-rails', '2.13.1'  
  # The following optional lines are part of the advanced setup.  
  # gem 'guard-rspec', '2.5.0'  
  # gem 'spork-rails', '4.0.0'  
  # gem 'guard-spork', '1.5.0'  
  # gem 'childprocess', '0.3.6'  
end  

group :test do  
  gem 'selenium-webdriver', '2.35.1'  
  gem 'capybara', '2.1.0'  
  gem 'factory_girl_rails', '4.2.0'  
  gem 'cucumber-rails', '1.4.0', :require => false  
  gem 'database_cleaner', github: 'bmabey/database_cleaner'  

  # Uncomment these lines on Linux.  
  # gem 'libnotify', '0.8.0'  

  # Uncomment these lines on Windows.  
  # gem 'rb-notifu', '0.0.4'  
  # gem 'win32console', '1.3.2'  
  # gem 'wdm', '0.1.0'  
end  

gem 'sass-rails', '4.0.1'  
gem 'uglifier', '2.1.1'  
gem 'coffee-rails', '4.0.1'  
gem 'jquery-rails', '3.0.4'  
gem 'turbolinks', '1.1.1'  
gem 'jbuilder', '1.0.2'  

group :doc do  
  gem 'sdoc', '0.3.20', require: false  
end  

group :production do  
  gem 'pg', '0.15.1'  
  gem 'rails_12factor', '0.0.2'  
end  

这是我的 spec/models/user_spec.rb 文件:

require 'spec_helper'  

describe User do
  pending "add some examples to (or delete) #{__FILE__}"
end

这是我的 app/models/user.rb 文件:
类用户

这是我的 spec_helper.rb 文件:

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

require 'test/unit'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)

RSpec.configure do |config|
  # ## Mock Framework
  #
  # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

  # If true, the base class of anonymous controllers will be inferred
  # automatically. This will be the default behavior in future versions of
  # rspec-rails.
  config.infer_base_class_for_anonymous_controllers = false

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = "random"
  config.include Capybara::DSL
end

我确实运行过捆绑安装。我还可以确认我已经创建了数据库并运行了迁移(db/test.sqlite3 已经存在)

【问题讨论】:

  • 请显示spec/models/user_spec.rbapp/models/user.rb 另外请确认您已创建数据库(rake db:create)并运行迁移(rake db:migrate)并完成bundle install
  • 您可能还分享了您的spec_helper.rb 文件。
  • 谢谢大家,上面添加了编辑。如果我能提供更多帮助,请告诉我。

标签: ruby-on-rails testing rspec


【解决方案1】:

在您的spec_helper.rb 中,您有以下行两次

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

删除第一个实例(第 2 行的那个)。这就是导致错误的原因。 在require 'rspec/rails' 之前有这行会导致问题,因为我们不知道Rails 是什么,所以我们不能调用root 方法。 第二个实例(第 13 行)很好,因为这是在require 'rspec/rails' 之后。

【讨论】:

    【解决方案2】:

    从您的 spec_helper.rb 文件中删除多余的 require 'spec_helper' 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多