我使用Rails 4.2和
Ruby 2.2以及rspec作为测试用例.我已经设定
Rails.env = 'test'
在我的spec_helper和rails_helper中.这是我的database.yml文件:
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
这是我的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',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
当我运行我的测试用例时,Rails.env按预期“测试”(使用pry验证).但是我的测试用例总是在开发数据库中.
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
自从过去几个小时以来,我一直在摸不着头脑,但似乎没有什么可以解开这个谜团.任何帮助都会很棒!