2011-07-05 16 views

Respuesta

16

Si está utilizando MongoID puede usar Database Cleaner con Truncation strategy. Por ejemplo:

RSpec.configure do |config| 
    config.use_transactional_fixtures = false 

    config.before :each do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.start 
    end 

    config.after do 
    DatabaseCleaner.clean 
    end 
end 
18

en mi humilde opinión, esta es una solución mucho mejor que la instalación de una joya para el propósito específico de la limpieza de su base de datos .... 3 líneas para ir en su spec_helper.rb:

RSpec.configure do |config| 
    #Other config stuff goes here 

    # Clean/Reset Mongoid DB prior to running the tests 
    config.before :each do 
    Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop) 
    end 
end 

Crédito: A user named Alex posted this as a solution for a similar question.

+9

Si está utilizando ** ** Mongoid 3, se quiere necesita algo como: 'Mongoid.default_session.collections.select {| c | c.name! ~/system /} .each (&: drop) ' – Alessandro

+7

Esto es totalmente quisquilloso y realmente no importa en absoluto, pero su solución es un poco ineficiente. Está iterando sobre todas las colecciones una vez para la selección y luego sobre el subconjunto en cada una. Esto simplemente itera sobre las colecciones una vez: 'Mongoid.default_session.collections.each {| coll | coll.drop a menos que /^system/.match(coll.name)} ' –

30

Ninguna de las otras respuestas funciona para mí con Mongoid 3.0. Solía ​​@Batkins respuesta modificada al igual que

RSpec.configure do |config| 

    # Clean/Reset Mongoid DB prior to running each test. 
    config.before(:each) do 
    Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/ }.each(&:drop) 
    end 
end 

Alternativamente, si desea vaciar la colección, pero no quieren soltarlo (tal vez usted tiene índices o algo así), hacer esto

Mongoid::Sessions.default.collections.select {|c| c.name !~ /system/}.each {|c| c.find.remove_all} 
+1

Lo siento. Comenté la respuesta anterior sin ver tu respuesta. Upvoted como 'Mongoid :: Sessions.default' funciona tan bien como' Mongoid.default_session'. – Alessandro

+0

@Alessandro - Gracias, no sabía sobre Mongoid.default_session – declan

7

en Mongoid v2.0.2

before(:each) do 
    Mongoid.purge! 
end 

Rdoc: Mongoid.purge!

+0

No funcionó cuando probé la respuesta seleccionada, todavía había algunos registros que se crearon de alguna manera, esto me ayudó. Y las pruebas son notablemente más rápidas como resultado de alguna manera también. – randomor

+0

creo que quieres Mongoid :: Config.purge! – bonhoffer

+0

'Mongoid.purge!' Funciona para mí con 4.0.2 y creo que es mejor que usar DatabaseCleaner. –

2

añadir a Gemfile:

gem 'database_cleaner', :github => 'bmabey/database_cleaner' 

plazo bundle install

agregar esto a su spec_helper:

config.before(:suite) do 
    DatabaseCleaner[:mongoid].strategy = :truncation 
    DatabaseCleaner[:mongoid].clean_with(:truncation) 
end 

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

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

todo el crédito es para: http://blog.codelette.com/2013/07/07/make-rspec-clean-up-mongoid-records/

+0

¿Por qué eliminaste tu pregunta sobre las variables de clase?Fue una buena idea, y tengo una respuesta para ti. –

Cuestiones relacionadas