ruby-on-rails-3 testing rspec2 guard

ruby on rails 3 - ¿Hay una manera de tener automáticamente un "rake db: migrate RAILS_ENV=test" después de "rake db: migrate" en el entorno de desarrollo?



ruby-on-rails-3 testing (6)

¿Hay alguna forma de realizar automáticamente una rake db:migrate RAILS_ENV=test después de cada rake db:migrate rake db:migrate RAILS_ENV=test en el entorno de desarrollo?

Tengo guard y guard-rspec ejecución, y estoy realmente molesto por las pruebas guard-rspec , incluso si funcionan manualmente en el navegador.

Me cuesta al menos 15 minutos cada vez que tengo una pausa en el desarrollo, descubrir que simplemente olvidé llamar rake db:migrate:test después del cambio de la base de datos.

Como ya estoy usando Guard , también pensé en agregar guard-rake al proyecto, pero no sé qué archivo debería ver. Al ver development.sqlite3 , rake db:migrate RAILS_ENV=test se rake db:migrate RAILS_ENV=test cada vez que haga algo con mis registros a través del navegador, así que esto no es realmente lo que quiero.

¿Puede alguien ayudarme con mi problema?


En respuesta a su pregunta original sobre el uso de guard-rake , puede ver db/schema.rb , ya que esto se actualizará cada vez que migre la base de datos. Sin embargo, este archivo también se modificará si realiza una reversión, por lo que probablemente tendrá que extraer la versión de migración de la línea de definición de esquema en db/schma.rb o usar rake db:test:prepare lugar de rake db:migrate RAILS_ENV=test .

Parece que esto es frágil, por lo que el uso de un alias de shell es probablemente el mejor enfoque. ¡Ojalá hubiera una mejor manera!


Más rápido: alias migrate=''rake db:migrate db:test:prepare'' (agregue esto en su .bashrc , cargará Rails solo una vez)


Posiblemente solo haga un alias de comando en su archivo .bashrc .

~ / .bashrc

alias rake_db_migrate=''rake db:migrate db:test:prepare''

Terminal

$ rake_db_migrate


Prefiero usar un alias de esta manera:

En tu ~/.bashrc

alias migrate=''rake db:migrate && rake db:test:prepare''

Es fácil pasar 30 minutos tratando de entender por qué sus pruebas no se pasan solo para recordar que no reinició la base de datos. Esto resolverá ese problema.


Una opción que me gusta bastante es anular la tarea real en otro script rake. Esto se invocará automáticamente después de ejecutar la migración. Así siempre creo un diagrama ERD después de migrar la base de datos:

# lib/tasks/database.rake namespace :db do desc ''Additional migrate task that creates the diagram'' task :migrate do if Rails.env.development? Rake::Task[''diagram:erd''].invoke end end end

Así que en tu caso:

# lib/tasks/database.rake namespace :db do desc ''Additional migrate task that creates the diagram'' task :migrate do `rake db:migrate RAILS_ENV=test` end end

Otro enfoque sería ejecutar lo siguiente, que clona su nuevo esquema a la base de datos de prueba:

rake db:migrate db:test:clone


Yo uso este alias:
alias rake_db_migrate=''rake db:migrate && rake db:migrate RAILS_ENV=test''

porque rake db:test:prepare está en desuso.

La razón por la que uso esto es porque nuestro proyecto usa pg_search (postgreSQL) junto con structure.sql (no schema.rb) y, por alguna razón, ejecutar rake db:migrate no prepara la base de datos de prueba.