2009-01-11 5 views
11

He escrito algunas pruebas de integración que me gustaría ejecutar contra una copia de mi base de datos prod antes de pasar a la producción. Esto me permite probar que todas mis rutas siguen siendo correctas, todas las páginas se procesan sin errores y algunos de los flujos de trabajo de varias páginas funcionan como se esperaba.¿Cómo ejecuto las pruebas de integración de Rails sin eliminar los contenidos de la base de datos?

Cuando ejecuto las pruebas de integración, se descarta la base de datos que he cargado y se cargan los dispositivos de prueba (como se esperaba). ¿Cómo puedo cambiar este comportamiento y mantener la copia de mi DB de producción que he cargado?

Respuesta

2

pruebas de integración demanda db: test: preparar el que llama db: test: clone_structure que exige db: Estructura: volcado y db: test: purga

usted puede escribir su propia tarea

namespace :your_namespace do 
    Rake::TestTask.new(:integration => "db:migrate(if you want") do |t| 
    t.libs << "test" 
    t.pattern = 'test/integration/**/*_test.rb' 
    t.verbose = true 
    end 
end 
+0

Ver mi actualización anterior - Todavía estoy viendo el mismo comportamiento con mi tarea me temo – RichH

+0

extraño, trabajó para mi. ¿Está ejecutando su nueva tarea 'rake dbtest: integración'? – aivarsak

+0

Sí, también he intentado cambiarle el nombre a 'integración' para asegurarme de que no se comportaba de manera extraña con la tarea de integración en el espacio de nombres de prueba. – RichH

0

Ajuste self.use_transactional_fixtures = true en sus pruebas de integración sería útil también si no desea tener que volver a cargar la copia de producción entre cada ejecución de la prueba.

De lo contrario, la prueba de integración ejecutará los datos con los cambios que realice.

0

que tenía que añadir una tarea de Rake de aivarsak

namespace :dbtest do 
    Rake::TestTask.new(:integration) do |t| 
    t.libs << "test" 
    t.pattern = 'test/integration/**/*_test.rb' 
    t.verbose = true 
    end 
end 

y también eliminar la línea

fixtures :all 

desde el archivo de prueba/test_helper.rb (o crear uno nuevo se hace referencia en su prueba de integración archivos)

1

Para que esto funcione, tuve que especificar el entorno cuando llamé a la tarea de rake, de lo contrario se ejecutarían las migraciones en la base de datos de desarrollo y luego se ejecutarían las pruebas en la prueba db; dado el ejemplo de arriba

namespace :dbtest do 
    Rake::TestTask.new(:integration => "db:migrate") do |t| 
    ... 

que tenía que ejecutar las pruebas al igual que

rake environment RAILS_ENV=test dbtest:integration 
Cuestiones relacionadas