5

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

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

让我知道我是否应该向您提供更多信息以便让事情顺利进行。

这是我的宝石文件:

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 文件:
class User < ActiveRecord::Base end

这是我的 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 已经存在)

4

2 回答 2

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'.

于 2014-11-11T17:32:41.640 回答
0

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

于 2013-11-07T07:39:33.557 回答