Rails 4: ¿Cómo reiniciar la base de datos de prueba?

Estoy en Rails 4 y he notado que algunas de mis pruebas RSpec están fallando porque algunas de mis refactorizaciones de prueba usan un filtro anterior (probablemente debido a las transacciones). Esta publicación describe un problema similar:

La base de datos de prueba de Rails no se borra después de algunas ejecuciones

En lugar de usar la gem DatabaseCleaner, ¿hay un comando de rake para borrar la base de datos de prueba? Creo que rake db:test:prepare está obsoleto en Rails 4. Además, si antes transacciones como

 post :create, user: Fabricate.attributes_for(:user) 

son persistentes ¿Existe una forma alternativa de refactorización para evitar la necesidad de borrar manualmente la base de datos de prueba?

Una solución excesiva sería:

 bundle exec rake db:drop RAILS_ENV=test bundle exec rake db:create RAILS_ENV=test bundle exec rake db:schema:load RAILS_ENV=test 

Podrías hacer todo esto en una tarea de rake y ejecutar eso.

Otra solución desde aquí es incluir el siguiente archivo spec_helper.rb

 config.after :all do ActiveRecord::Base.subclasses.each(&:delete_all) end 

Descargo de responsabilidad: no he probado esto y debería leer la publicación SO, ya que puede no funcionar en todas las situaciones.

Dicho esto, recomendaría usar la gem limpiadora de bases de datos para evitar situaciones como esta.

Puede ser:

 bundle exec rake db:reset RAILS_ENV=test 

Puede agregar un filtro posterior eliminando todas las entradas de las tablas correspondientes.

A veces es posible que necesite ejecutar este comando (opcional)

rails db:environment:set RAILS_ENV=test

Pero asegúrese de borrar su base de datos de prueba debería ser tan fácil como:

rails db:drop db:create db:migrate RAILS_ENV=test

En teoría, este ActiveRecord::Migration.maintain_test_schema! debe hacer el truco Ponlo en rails_helper.rb

Terminé escribiendo una tarea de rake simple que descarta / migra (o suelta y migra) todas las bases de datos de prueba y desarrollo, según el comando ejecutado.

Incluye una funcionalidad para indicar al usuario si desea continuar cuando se produce un error, y utiliza el método popen3 de Open3 (de modo que podemos acceder a stdin, stdout y stderr; y cualquier comando fallido no resulta en el proceso de la tarea de rake) abortar (a diferencia de cuando se utiliza el sistema )).

Esperemos que esto ayude a alguien. 🙂

https://github.com/xtrasimplicity/rake_all_db_helper/

edición: esto deberá ejecutarse manualmente desde su shell, sin embargo, siempre que quiera borrar su base de datos.