Очиститель базы данных RSpec +, не очищает правильно - PullRequest
11 голосов
/ 29 марта 2012

Я действительно не могу понять, почему DatabaseCleaner не очищает мою тестовую базу данных. Это то, что я получаю, подсказывая

1.9.2p290 :007 > DatabaseCleaner.clean

-

=> [#<DatabaseCleaner::Base:0x007fa7e4dd8b58 @autodetected=true, @orm=:active_record, @strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fa7e4dc14f8 @db=:default>>] 

Похоже, что база данных установлена ​​неправильно (предполагается: test), поэтому я получил решение типа

 DatabaseCleaner[:active_record, :connection => :test].clean
 # => nil

Камень, кажется, настроен правильно:

1.9.2p290 :007 > DatabaseCleaner[:active_record, :connection => :test]

#<DatabaseCleaner::Base:0x007fe8fcfd4868 @orm=:active_record, @strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fe8fcfd2748 @db=:test, @connection_hash={"adapter"=>"sqlite3", "database"=>"db/test.sqlite3", "pool"=>5, "timeout"=>5000}>, @db=:test> 

Это похоже на правильную настройку тестовой базы данных, однако она по-прежнему не будет правильно очищать базу данных. Есть предложения?

Большое спасибо.

Ответы [ 4 ]

14 голосов
/ 19 ноября 2013

Даже при правильно настроенном очистителе базы данных легко оставить данные без дела.

config.before(:suite) do
  DatabaseCleaner.clean_with :truncation  # clean DB of any leftover data
  DatabaseCleaner.strategy = :transaction # rollback transactions between each test
  Rails.application.load_seed # (optional) seed DB
end

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

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

Приведенная выше конфигурация запускает и запускает очиститель с каждой стороны теста каждый .

Если вы затем используете before :all в своих спецификациях, вы можете получить данные, лежащие вокруг:

describe User do
  # Before all is outside the before :each 
  before :all do
    @user = User.create(:email => 'hello@example.com')
  end

  ...tests here
end
5 голосов
/ 16 августа 2012

Вот мой spec_helper.rb (слегка измененный) - может, это вам поможет?

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'database_cleaner'

RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end
  config.before(:each) do
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end
4 голосов
/ 25 октября 2012

Недавно у Авди Гримм была хорошая статья о настройке очистителя базы данных:

http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

1 голос
/ 18 марта 2015
$ rails c test
> require 'database_cleaner'
> DatabaseCleaner.strategy = :truncation
> DatabaseCleaner.clean

https://github.com/DatabaseCleaner/database_cleaner

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...