I am using Rails 4.2 with Ruby 2.2 and rspec for testcases. I have set
Rails.env = 'test'
in both my spec_helper and rails_helper. Here is my database.yml file:
development:
adapter: postgresql
encoding: unicode
database: app_dev
pool: 5
username: postgres
password: root
test:
adapter: postgresql
encoding: unicode
database: app_test
pool: 5
username: postgres
password: root
production:
adapter: postgresql
encoding: unicode
database: app_prod
pool: 5
username: postgres
password: root
Here is my rails_helper:
Rails.env = 'test'
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.include JsonHelper
config.include PathHelper
config.include S3Helper
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
end
application.rb:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'yaml'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module AppName
class Application < Rails::Application
config.generators do |g|
g.assets = false
g.helper = false
g.views = false
end
# Load all locale files
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.load_path += Dir[Rails.root.join(
'config', 'locales', '**', '**', '*.{rb,yml}')]
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.autoload_paths += Dir["#{config.root}/app/workers/"]
config.action_controller.include_all_helpers = false
config.active_record.schema_format = :sql
config.i18n.available_locales = [:en, :hi, :mr]
config.i18n.default_locale = :hi
config.i18n.fallbacks = [:en]
config.active_record.raise_in_transactional_callbacks = true
end
end
Gemfile:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18.2'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# Turbolinks makes following links in your web application faster
gem 'turbolinks', '~> 2.5.3'
# Use Unicorn as the app server
gem 'unicorn', '~> 4.9.0'
# Use jquery as the JavaScript library
gem 'jquery-rails', '~> 4.0.4'
# Integrate the jQuery Validation plugin into the Rails asset pipeline
gem 'jquery-validation-rails', '~> 1.13.1'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# use swagger for api documentation
gem 'swagger-docs', '~> 0.1.9'
# for consuming restful web services
gem 'httparty', '~> 0.13.5'
# for ActiveRecord model/data translations
gem 'globalize', '~> 5.0.0'
# generates accessors for translated fields
gem 'globalize-accessors', '~>0.2.1'
# Amazon Web service SDK Ruby
gem 'aws-sdk', '~> 2.1.0'
# cloud services for S3
gem 'fog', '~> 1.33.0'
# handle file uploads
gem 'carrierwave', '~>0.10.0'
# Photo Resizing
gem 'mini_magick', '~> 4.2.7'
# Background Jobs
gem 'sidekiq', '~> 3.4.2'
# Geocoder
gem 'geocoder', '~> 1.2.9'
# active admin
gem 'activeadmin', '~> 1.0.0.pre1'
# for authentication
gem 'devise', '~> 3.5.1'
# for roles of active admin
gem 'rolify', '~> 4.0.0'
# for authorization
gem 'cancan', '~> 1.6.10'
group :development, :test do
# Debugging using pry
gem 'pry-rails', '~> 0.3.4'
gem 'pry-byebug', '~> 3.1.0'
# testing framework for rails
gem 'rspec-rails', '~> 3.1.0'
gem 'rspec-collection_matchers', '~> 1.1.2'
gem 'factory_girl_rails', '~> 4.4.1'
gem 'shoulda-matchers', '~> 2.8.0'
# code test coverage
gem 'simplecov', '~> 0.7.1'
gem 'simplecov-rcov', '~> 0.2.3'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# speeds up development by keeping your application running in the background
gem 'spring', '~> 1.3.6'
end
group :development do
# generates ER diagrams for rails application
gem 'rails-erd', '~> 1.4.1'
end
group :test do
# set of strategies for cleaning your database
gem 'database_cleaner', '~> 1.3.0'
end
When I run my test cases, Rails.env is 'test' as expected (used pry to verify). However my test cases are always hitting the development database.
Rails.env
#=> "test"
ActiveRecord::Base.connection_config
#=> {:adapter=>"postgresql", :encoding=>"unicode", :database=>"app_dev", :pool=>5, :username=>"postgres", :password=>"root"}
spec_helper:
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'simplecov'
require 'simplecov-rcov'
require 'database_cleaner'
require 'factory_girl_rails'
ENV['RAILS_ENV'] ||= 'test'
SimpleCov.start
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
# Database Cleaner
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
Rails.application.load_seed
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
I have been scratching my head since last few hours but nothing seems to solve the mystery. Any help would be greatful!
User.all. It showed up all my users in my dev database. Same for other tables also. - Aaditi JainActiveRecord::Base.connection_config? - dimakura