title: Rspec - uninitialized constant error User
body: <p>I have written tests on Rspec for my model User and get error while starting 'rspec spec'</p>
  
  <p>NameError: uninitialized constant User</p>
  
  <p>my test <strong>spec/models/ivd/user_spec.rb</strong></p>
  
  <pre><code>require 'rails_helper'
  
  module Ivd
    RSpec.describe User, type: :model do
      let(:user) { FactoryGirl.create(:ivd_user, email: "user@example.org", password: "very-secret", admin: true) }
      it 'has a valid factory' do
        expect(user).to be_valid
      end
      describe '.find_for_oauth' do
        let!(:user) { FactoryGirl.create(:ivd_user) }
  
        describe 'twitter' do
          let(:auth) { OmniAuth::AuthHash.new({provider: 'twitter', uid: '12345'})}
  
          context 'user has already authorization' do
            it 'return user' do
              user.identities.create({provider: 'twitter', uid: '12345'})
              expect(User.find_for_oauth(auth)).to eq user
            end
          end
        end
  
      end
  
    end
  end
  </code></pre>
  
  <p><strong>spec_helper.rb</strong></p>
  
  <pre><code>ENV['RAILS_ENV'] ||= 'test'
  
  require 'simplecov'
  # SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
  SimpleCov.start :rails do
    add_filter do |source_file|
      source_file.lines.count &lt; 5
    end
  end
  
  require File.expand_path('../dummy/config/environment.rb', __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  require 'factory_girl_rails'
  require 'capybara/poltergeist'
  # require 'capybara/rails'
  require 'ivd/seeder'
  # http://www.thegreatcodeadventure.com/stubbing-with-vcr/
  require 'vcr'
  require 'webmock/rspec'
  WebMock.disable_net_connect!(allow_localhost: true)
  # load(Rails.root.join("db", "seeds.rb"))
  
  # Configure capybara for integration testing
  # Capybara.default_driver = :rack_test
  # Capybara.default_selector = :css
  # js_options = {js_errors: false}
  # above is sometimes useful to troubleshoot errors with tests
  js_options = {}
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, js_options)
  end
  Capybara.javascript_driver = :poltergeist
  # Capybara.ignore_hidden_elements = false
  
  # http://stackoverflow.com/questions/24078768/argumenterror-factory-not-registered
  # as per above, need to explicitly set below
  FactoryGirl.definition_file_paths = [File.expand_path('../factories', __FILE__)]
  FactoryGirl.find_definitions
  # Oddly above does not occur if factory_girl_rails is only referrenced in ivd.gemspec
  # but not main gemfile
  
  Rails.backtrace_cleaner.remove_silencers!
  
  # Load support files
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
  
  ActionController::Base.prepend_view_path "#{Ivd::Engine.root}/app/themes/default/views/"
  
  
  
  RSpec.configure do |config|
  
    # TODO - consider precompiling assets to speed up tests
    # config.before(:suite) do
    #   Rails.application.load_tasks
    #   Rake::Task["assets:precompile"].invoke
    # end
  
    config.include JsonSpec::Helpers
    config.warnings = false
    config.mock_with :rspec
    config.infer_base_class_for_anonymous_controllers = false
    config.order = 'random'
    # config.include Ivd::ApplicationHelper
    # config.include Rails.application.routes.url_helpers
    # config.include Ivd::Engine.routes.url_helpers
  
    config.use_transactional_fixtures = false
    #
    # Make sure the database is clean and ready for test
    config.before(:suite) do
      DatabaseCleaner.clean_with(:truncation)
      Ivd::Seeder.seed!
    end
  
    config.after(:all) do
      # http://renderedtext.com/blog/2012/10/10/cleaning-up-after-before-all-blocks/
      DatabaseCleaner.clean_with(:truncation)
    end
  
    config.before(:each) do
      DatabaseCleaner.strategy = :transaction
    end
  
    config.before(:each, js: true) do
      # truncation is slower but more reliable
      DatabaseCleaner.strategy = :truncation
    end
  
    config.before(:each) do
      DatabaseCleaner.start
    end
  
    config.after(:each) do
      DatabaseCleaner.clean
    end
  end
  </code></pre>
  
  <p><strong>rails_helper.rb</strong></p>
  
  <pre><code>ENV['RAILS_ENV'] ||= 'test'
  
  require File.expand_path('../dummy/config/environment.rb', __FILE__)
  
  abort('The Rails environment is running in production mode!') if Rails.env.production?
  require 'spec_helper'
  require 'rspec/rails'
  require 'rails-controller-testing'
  # Add additional requires below this line. Rails is not loaded until this point!
  
  require 'devise'
  
  
  ActiveRecord::Migration.maintain_test_schema!
  
  RSpec.configure do |config|
    config.warnings = false
    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{Ivd::Engine.root}/spec/fixtures"
    # above used by fixture_file_upload
    # eg in:
    # /Users/etewiah/Ed/sites-2016-oct-ivd/ivd/spec/services/ivd/import_properties_spec.rb
  
  
    config.infer_spec_type_from_file_location!
  
    config.filter_rails_from_backtrace!
  
    [:controller, :view, :request].each do |type|
      config.include ::Rails::Controller::Testing::TestProcess, type: type
      config.include ::Rails::Controller::Testing::TemplateAssertions, type: type
      config.include ::Rails::Controller::Testing::Integration, type: type
    end
  
  
    # https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)
    config.include Devise::Test::ControllerHelpers, type: :controller
  
    config.include FeatureHelpers, type: :feature
  
    config.extend ControllerMacros, type: :controller
    # https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs
    config.include ControllerHelpers, type: :controller
    # https://github.com/plataformatec/devise/wiki/How-To:-sign-in-and-out-a-user-in-Request-type-specs-(specs-tagged-with-type:-:request)
    config.include RequestSpecHelpers, type: :request
  end
  </code></pre>
  
  <p>I have model User, which has been inherited from ApplicationRecord.</p>
  
  <p>File .rspec contains only:</p>
  
  <p>--color
  --require byebug
  --require rails_helper</p>