0
votes

I have written tests on Rspec for my model User and get error while starting 'rspec spec'

NameError: uninitialized constant User

my test spec/models/ivd/user_spec.rb

require 'rails_helper'

module Ivd
  RSpec.describe User, type: :model do
    let(:user) { FactoryGirl.create(:ivd_user, email: "[email protected]", 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

spec_helper.rb

ENV['RAILS_ENV'] ||= 'test'

require 'simplecov'
# SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
SimpleCov.start :rails do
  add_filter do |source_file|
    source_file.lines.count < 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

rails_helper.rb

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

I have model User, which has been inherited from ApplicationRecord.

File .rspec contains only:

--color --require byebug --require rails_helper

1
try updating your specs with just Rspec.describe .. end block only (without module Ivd .. end)sa77
i have tried, but error is sameStefan Hansch

1 Answers

0
votes

Is your model itself within the module Ivd? i.e.

module Ivd
  class User

If so, you want to be using RSpec.describe Ivd::User rather than wrapping the call in the module.