Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rspec testing throws Uninitialized constant Rails (NameError)

Please forgive any shortcomings in this (my first-ever) post on StackOverflow. I'm brand new to Ruby on Rails. I'm following the Rails Tutorial. I have spent many unsuccessful hours consulting other threads discussing the same Name Error that I'm raising in this question.

Any attempt of mine to run an rspec test like so: $bundle exec rspec spec/models/user_spec.rb throws the now infamous error: `': uninitialized constant Rails (NameError)

Let me know if there's any more information I should provide you in order to get the ball rolling.

Here's my 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  

Here is my spec/models/user_spec.rb file:

require 'spec_helper'  

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

Here is my app/models/user.rb file:
class User < ActiveRecord::Base end

Here is my spec_helper.rb file:

# 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

I have definitely run bundle install. I can also confirm that I've already created the database and run the migration (db/test.sqlite3 already exists)

like image 462
Jon Tippens Avatar asked Nov 11 '22 19:11

Jon Tippens


1 Answers

In your spec_helper.rb, you have the following line twice:

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

Delete the first instance (the one on line 2). This is what is causing the error. Having this line before require 'rspec/rails' will cause problems because we don't know what Rails is, and so we cannot call the root method. The second instance (on line 13) is fine because this is after require 'rspec/rails'.

like image 117
James Lawson Avatar answered Nov 15 '22 05:11

James Lawson