ruby-on-rails – 使用开发数据库的Rspec

我使用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

自从过去几个小时以来,我一直在摸不着头脑,但似乎没有什么可以解开这个谜团.任何帮助都会很棒!

解决方法

听起来好像环境中的某个地方(可能是您的宝石之一),它将您的环境设置为dev或建立与dev数据库的连接.

要明确使其连接到测试数据库,请添加

ActiveRecord::Base.establish_connection

你的rails_helper.

麻烦制造者的主要候选人将是’gem’trail-erd’,’〜> 1.4.1′ .如果您在迁移时自动生成图表,则在迁移测试模式时,它将连接到dev数据库以转储图表.

尝试删除此gem或“.rake”文件,看看会发生什么.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...