2011-04-28 10 views
8

estoy empezando una nueva aplicación y observe algún tipo de documentación que falta de la última vez que he construido una aplicación MongoId desde cero. Es decir, que utilizan para sugerir en una página que ya no existe (http://mongoid.org/docs/integration/) incluir algún código para colocar las colecciones de MongoId (después de las pruebas).Configuración RSpec con nuevos rieles/MongoId aplicación

Ya no se menciona en el sitio ... ¿es esto (**** abajo) ya no se considera una práctica necesaria o buena?!?

#spec/spec_helper.rb: 
... 
RSpec.configure do |config| 

    config.mock_with :rspec 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    #config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    #config.use_transactional_fixtures = true 

    # Below from <http://mongoid.org/docs/integration/> **** 
    config.after :suite do 
    Mongoid.master.collections.select do |collection| 
     collection.name !~ /system/ 
    end.each(&:drop) 
    end 
end 

Respuesta

11

Modificar el archivo de especificaciones /spec_helper.rb para agregar esto:

 
RSpec.configure do |config| 
    # Other things 

    # Clean up the database 
    require 'database_cleaner' 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.orm = "mongoid" 
    end 

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

No funciona con Mongoid 4.0 y rspec-core 2.14.7. estoy usando @Jan solución por debajo de – roody

2

Usted puede hacer seguir haciendo (aunque tal vez antes de cambiar a la suite) que - la gema DatabaseCleaner es agradable.

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

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

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

Esto también parece estar trabajando en Rails3 y es más limpio

config.before :each do 
    Mongoid.purge! 
end 

No hace necesita un GEM adicional.

+0

Tan pronto como alguien comprueba esto (no tengo un proyecto MongoId activa probar este en este momento) Voy a pasar la marca de verificación aquí, ya que parece mucho más simple. – Meltemi

+1

Funciona, pero con una advertencia: Mongoid.purge! también eliminará todos los índices. Esto significa que cualquier especificación que dependa de un índice con unique: true fallará. La solución consiste en llamar a create_indexes en cada una de las clases de modelo inmediatamente después de la llamada para purgar. – ced

Cuestiones relacionadas