unitarias test rails pruebas hacer español como ruby-on-rails ruby rspec

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.