6

Solo me pregunta si hay una forma de ejecutar las pruebas de Rails sin abandonar la base de datos. Actualmente solo estoy ejecutando pruebas unitarias y estoy usando el siguiente comando de rake para hacerlo: rake test:units.Ejecutar pruebas de rieles sin perder la base de datos de prueba

Gracias por la ayuda con anticipación!

Por si acaso esto es relevante:

  • Rails 3
  • de Ruby 1.8.7 (MRI)
  • Oracle Database 11g
    • activerecord-oracle_enhanced adaptador

Respuesta

2

Después de investigar un poco, descubrí que no hay forma de hacer esto. Las tareas de rake de prueba siempre soltarán la base de datos, incluso cuando proporcione la opción TEST=, como sugiere Bohdan.

Al usar la opción --trace, esto puede ser probado. Aquí está la salida:

$ rake test:units TEST=test/unit/post_test.rb --trace 
(in /Users/johnnyicon/Development/ror/test-app) 
** Invoke test:units (first_time) 
** Invoke test:prepare (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
** Execute db:test:prepare 
** Invoke db:test:load (first_time) 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:load 
** Invoke db:schema:load (first_time) 
** Invoke environment 
** Execute db:schema:load 
** Execute test:prepare 
** Execute test:units 

lectura a través de la Ruby on Rails Guides for Testing, que describe lo que algunas de estas tareas significa rastrillo. A la que debe prestar especial atención es a la tarea db:test:load, que verá en la 7ma línea desde la parte inferior de la salida como ** Execute db:test:load. Las guías dicen lo siguiente acerca de esta tarea:

recrear la base de datos de prueba desde el schema.rb actual

Así que incluso si tuviera que ejecutar la unidad de prueba, uno por uno, como sugiere Bohdan, la la tarea de rake aún recrearía la base de datos. No era la respuesta que esperaba, pero ya no es un problema.

La razón por la que pedí comenzar fue porque no tenía acceso a otra base de datos para usarla para las pruebas, así que también estaba usando mi base de datos de desarrollo para realizar pruebas. Pero desde entonces, he podido obtener otra base de datos dedicada para probar.

Gracias de todos modos Bohdan! Aprecio la ayuda!

+1

Me alegro de escucharlo. Su base de datos de prueba * debe * borrarse cada vez que ejecute pruebas, de lo contrario sus pruebas serán inexactas. –

0

¿No podría escribir una tarea de Rake personalizada que mono parcheó la tarea Rake db: test: load para no hacer nada?

0

Para aquellos que buscan una forma de omitir el comportamiento por defecto de Rails, trate de añadir esto a su Rakefile:

Rake::Task["db:test:prepare"].clear 
Rake::Task["db:test:load"].clear 
Rake::Task["db:test:purge"].clear 
+0

¡esto no funciona! – dariush

1

en los carriles 5 (y posiblemente versiones anteriores), acaba de comentar, la siguiente línea en spec/rails_helper.rb:

ActiveRecord::Migration.maintain_test_schema! 

Esto evitará que rake test o rspec intenten soltar su DB de prueba. También deberá ejecutar migraciones manualmente.

Cuestiones relacionadas