ruby-on-rails - pruebas - ruby on rails test
Rieles 4: ¿Cómo restablecer la base de datos de prueba? (6)
A veces puede que necesite ejecutar este comando (opcional)
rails db:environment:set RAILS_ENV=test
Pero seguro borrar su base de datos de prueba debería ser tan fácil como:
rails db:drop db:create db:migrate RAILS_ENV=test
Estoy en Rails 4 y he notado que algunas de mis pruebas de RSpec están fallando porque algunas de mis refactorizaciones de prueba usan un filtro anterior (presumiblemente 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 gema DatabaseCleaner, ¿hay un comando de rastrillo para limpiar la base de datos de prueba?
Creo que
rake db:test:prepare
está en desuso en Rails 4. Además, si antes de 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?
En teoría, este
ActiveRecord::Migration.maintain_test_schema!
debería hacer el truco.
Ponlo en
rails_helper.rb
Puede agregar un filtro posterior eliminando todas las entradas de las tablas en cuestión.
Puede ser:
bundle exec rake db:reset RAILS_ENV=test
Terminé escribiendo una tarea de rastrillo simple que elimina / migra (o elimina y migra) todas las bases de datos de prueba y desarrollo, dependiendo del comando ejecutado.
Incluye funcionalidad para preguntar al usuario si desea continuar cuando se produce un error, y utiliza el método popen3 de Open3 (de modo que podamos acceder a stdin, stdout y stderr; y cualquier comando fallido no da como resultado el proceso de la tarea de rake abortar (a diferencia de cuando se usa el sistema )).
Esperemos que esto ayude a alguien. :)
https://github.com/xtrasimplicity/rake_all_db_helper/
editar: sin embargo, esto deberá ejecutarse manualmente desde su shell, siempre que desee borrar su base de datos.
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 rastrillo y ejecutarlo.
Otra solución a partir de
here
es incluir lo siguiente en su archivo
spec_helper.rb
config.after :all do
ActiveRecord::Base.subclasses.each(&:delete_all)
end
Descargo de responsabilidad: no he probado esto y debe leer la here ya que puede no funcionar en todas las situaciones.
Dicho esto, recomendaría usar la gema limpiadora de la base de datos para evitar situaciones como esta.