标签: database-cleaner

Rails Rspec Capybara和DatabaseCleaner - 仅在特征测试中使用截断

我看到这个很酷的方法只使用数据库清理程序:使用以下方法截断capybara测试:js => true

在spec_helper.rb中:

config.before(:each) do
  DatabaseCleaner.strategy = if example.metadata[:js]
    :truncation
  else
    :transaction
  end
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner.clean
end 
Run Code Online (Sandbox Code Playgroud)

问题是,使用水豚进行的任何功能测试似乎都需要清除策略:截断.

但是,所有其他规格都适用于:交易,这要快得多.

有没有一种方法只为capybara功能测试指定策略?就像是:

DataCleaner.strategy( :truncation ) if :type => :feature
Run Code Online (Sandbox Code Playgroud)

testing ruby-on-rails capybara database-cleaner

6
推荐指数
1
解决办法
1353
查看次数

如何在错误的rspec规范之间清理我的数据库?

我已将database_cleaner gem添加到我的rails应用程序中,以便在规范之间清理我的数据库.这是我对database_cleaner的当前配置,位于spec/spec_helper.rb:

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
    DatabaseCleaner.start
    DatabaseCleaner.clean
  end

  config.before(:each) do
    DatabaseCleaner.clean
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

  config.after(:suite) do
    DatabaseCleaner.clean
  end
Run Code Online (Sandbox Code Playgroud)

现在,只要运行的每个最后一个规范通过或失败,此配置都可以正常工作.

但是,如果出现错误(rspec不会给你一个E像minitest一样的好东西,它会抛出这样的东西:

09:17:32 - INFO - Running: spec
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/gems/1.9.1/gems/activerecord-4.0.1/lib/active_record/validations.rb:57:in `save!': Validation failed: Email has already been taken (ActiveRecord::RecordInvalid)
Run Code Online (Sandbox Code Playgroud)

),数据库没有清理!错误之前的规范中的残留数据保留在数据库中.我想这是因为database_cleaner不会将错误的规范视为完成,因此不会清理数据库.

现在,在您再次运行规范之前,这并不会造成任何伤害.然后残差数据会产生类似于此的错误:

09:17:32 - INFO - Running: spec
/usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/gems/1.9.1/gems/activerecord-4.0.1/lib/active_record/validations.rb:57:in `save!': Validation failed: Email has already been taken (ActiveRecord::RecordInvalid)
Run Code Online (Sandbox Code Playgroud)

绕过这个错误很简单; 运行rails_env=test rake db:reset或发射了你的数据库外壳和排空使用SQL语句中的相关表格将清除该数据,并允许顺利要运行的规范.

然而,这变得很烦人.在我的任何规格中都有一个错误的角色(任何让它变得错误而不是失败的东西)会导致我的整个测试工作流程堵塞,就像自动武器的发射机制一样!

您对database_cleaner有什么建议?您是否有任何允许清理数据库的示例配置,即使在错误测试的情况下?

我正在使用后卫来运行我的工厂女孩​​进一步增强的rspecs:

的Gemfile:

source 'https://rubygems.org'

group :development do
    gem 'capistrano' …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails guard database-cleaner factory-bot

6
推荐指数
1
解决办法
6587
查看次数

在node.js中测试后清理数据库

我怎样才能每次清理数据库

在Rails中,我使用https://github.com/bmabey/database_cleaner,但是我没有找到与node.js类似的东西

node.js(v0.10.26),PostgreSQL(9.3.3),mocha,restify和knex。

postgresql node.js npm database-cleaner knex.js

6
推荐指数
2
解决办法
3600
查看次数

database_cleaner 正在擦除我的开发数据库

我已经database-cleaner为我的 rails 4 应用程序进行了配置,每次运行测试时,我发现我的数据库在testdevelopment环境中都被清除了。

我的配置rails_helper如下:

ENV["RAILS_ENV"] ||= 'test'
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'database_cleaner'
Rails.env = "test"
# Add additional requires below this line. Rails is not loaded until this point!

# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails-4 database-cleaner

6
推荐指数
1
解决办法
2350
查看次数

使用续集和数据库清理器的外键约束问题

我正在使用数据库清理器续集和sqlite外键约束遇到问题.具体来说,我正在使用:truncationCapybara集成测试的策略.

对于给定的示例模式:

CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE events(id INTEGER PRIMARY KEY, title TEXT);

CREATE TABLE events_users(
  user_id INTEGER,
  event_id INTEGER,

  FOREIGN KEY(user_id) REFERENCES users(id),
  FOREIGN KEY(event_id) REFERENCES events(id)
);
Run Code Online (Sandbox Code Playgroud)

和续集模特:

class User < Sequel::Model
  many_to_many :events
end

class Event < Sequel::Model
  many_to_many :users
end
Run Code Online (Sandbox Code Playgroud)

运行以下内容:

# normally this would be run in
# an rspec before(:each) for my :feature specs
DatabaseCleaner.start
DatabaseCleaner.strategy = :truncation

bob = User.create(name: "bob")
sally …
Run Code Online (Sandbox Code Playgroud)

ruby sqlite sequel database-cleaner

6
推荐指数
1
解决办法
705
查看次数

PG :: ConnectionBad:将rails从4.2升级到5.2后关闭连接

我已将我的rails项目的版本从4.2升级到5.2.1我的一些测试失败,因为完整跟踪上的pg连接关闭错误如下所示.

    Failure/Error: DatabaseCleaner[:active_record].clean_with(:truncation)

    ActiveRecord::StatementInvalid:
    PG::ConnectionBad: connection is closed: TRUNCATE TABLE "public"."alerts", "public"."article_attachments", "public"."article_check_specification_tolerances", "public"."article_machine_part_settings", "public"."articles", "public"."attachments", "public"."check_batches", "public"."check_groups", "public"."check_specification_machine_types", "public"."check_specification_priorities", "public"."check_specification_responsibility_areas", "public"."check_specifications", "public"."checks", "public"."comments", "public"."counters", "public"."customers", "public"."defect_groups", "public"."defect_translations", "public"."defects", "public"."delayed_jobs", "public"."furnaces", "public"."gv_area_equipments", "public"."gv_areas", "public"."gv_components", "public"."gv_entries", "public"."gv_equipment_families", "public"."gv_equipments", "public"."gv_squads", "public"."gv_stop_reasons", "public"."gv_sub_equipment_components", "public"."gv_sub_equipments", "public"."job_specifications", "public"."jobs", "public"."lab_recipe_versions", "public"."lab_recipes", "public"."lines", "public"."machine_downtimes", "public"."machine_groups", "public"."machine_part_change_reasons", "public"."machine_part_changes", "public"."machine_part_translations", "public"."machine_parts", "public"."machine_type_group_machine_types", "public"."machine_type_groups", "public"."machine_types", "public"."messages", "public"."mold_sets", "public"."packing_schemes", "public"."rails_admin_settings", "public"."reasons", "public"."rejects", "public"."responsibility_areas", "public"."roles", "public"."settings", "public"."shift_definitions", "public"."shifts", "public"."system_log_entries", "public"."task_status_changes", "public"."tasks", "public"."tresholds", "public"."user_responsibility_areas", "public"."users", "public"."users_roles", "public"."workstations", "public"."machines", "public"."systematic_rejects", "public"."systematic_reject_machines" RESTART IDENTITY CASCADE; …
Run Code Online (Sandbox Code Playgroud)

rake rspec ruby-on-rails-4 database-cleaner ruby-on-rails-5

6
推荐指数
1
解决办法
436
查看次数

Database_Cleaner with AR-Octopus 不清理记录

我们有一个使用分片数据库的 AR-Octopus gem 的项目。我们遇到的问题是 gem 'database_cleaner' 在使用这个设置时没有清理记录,因为我们一直在我们的测试数据库中有剩余的记录,这会导致我们的测试套件出现问题。

我找到了这个 GitHub 要点 - https://gist.github.com/nowlinuxing/22ea0ab673a5622eb48d

这是我的 database_cleaner 配置文件

# spec/support/database_cleaner.rb

require 'database_cleaner'

RSpec.configure do |config|
  config.before(:suite) do
   DatabaseCleaner.strategy = :transaction
   DatabaseCleaner.clean_with(:truncation)
  end

  ["master", *Octopus.config[Rails.env].keys].each do |shard|
    DatabaseCleaner[:active_record, model: ActiveRecord::Base.using(shard)]
  end

  config.around(:each) do |example|
   DatabaseCleaner.cleaning do
    example.run
   end
  end
 end
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题?如果是这样,你做了什么来解决这个问题?只是在寻找一些有用的见解。

ruby-on-rails octopus database-cleaner

5
推荐指数
0
解决办法
240
查看次数

配置Turnip和Database_cleaner

我正在使用Turnip和Ruby on Rails.我有使用和不使用javascript的场景.我想对transaction非JavaScript场景使用DatabaseCleaner策略,以及truncation标记为等的场景的策略等.@javascript@selenium

我正在使用以下Rspec功能解决方案

config.around(:each, :js => true) do |ex|
  DatabaseCleaner.strategy = :truncation
  ex.run
  DatabaseCleaner.strategy = :transaction
end
Run Code Online (Sandbox Code Playgroud)

但它在Turnip案例中不起作用.使它按预期工作的最佳方法是什么?或者换句话说,如何指定由@javascript(或@selenium等)标记标记的萝卜场景config.before

javascript rspec ruby-on-rails capybara database-cleaner

4
推荐指数
1
解决办法
598
查看次数

rspec with mongoid,devise,database_cleaner:ActiveRecord :: ConnectionNotEstablished error

我正在尝试使用rspec与mongoid,devise,database_cleaner,我有这个错误

 Failure/Error: Unable to find matching line from backtrace
 ActiveRecord::ConnectionNotEstablished:
   ActiveRecord::ConnectionNotEstablished
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:541:in `retrieve_connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_handling.rb:87:in `connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:499:in `create_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:984:in `load_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:957:in `setup_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:806:in `before_setup'
Run Code Online (Sandbox Code Playgroud)

我的gemfile测试组

group :development, :test do
    gem "factory_girl_rails", "~> 4.0"
  gem 'rspec-rails', '~> 3.1.0'
  gem 'spork', '~> 0.8.5'
  gem 'mongoid-rspec', '~> 2.0.0.rc1'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'shoulda-matchers'
end
Run Code Online (Sandbox Code Playgroud)

和我的rails_helper.rb ==

ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require "mongoid"
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails devise mongoid database-cleaner

4
推荐指数
1
解决办法
695
查看次数

Rspec - 每次测试后如何清理数据库

我有一个功能规格与Capybara的登录页面,我正在使用FactoryGirl + DatabaseCleaner

require 'rails_helper'

feature 'Admin signs in' do

  background do
    FactoryGirl.create(:user)
  end

  scenario 'with valid credentials' do
    visit admin_root_path
    fill_in 'user_email', :with => 'email@email.com'
    fill_in 'user_password', :with => 'testpassword'
    click_button 'Sign in'
    expect(page).to have_content('Dashboard')
  end

  scenario 'with invalid credentials' do
    visit admin_root_path
    fill_in 'user_email', :with => 'email@email.com'
    fill_in 'user_password', :with => 'wrongpassword'
    click_button 'Sign in'
    expect(page).to have_content('Admin Login')
  end

end
Run Code Online (Sandbox Code Playgroud)

运行测试,我收到以下错误:

1) Admin signs in test with invalid credentials
 Failure/Error: FactoryGirl.create(:user)
 ActiveRecord::RecordInvalid:
   Validation failed: Email has already been …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails capybara database-cleaner factory-bot

4
推荐指数
2
解决办法
1万
查看次数