2011-09-17 9 views
6

Quiero que 'prueba de rake: unidades' ejecute las pruebas en una base de datos de prueba preparada con éxito mientras mi base de datos de desarrollo está inactiva. Actualmente Rails está intentando construir la base de datos de prueba a partir de la base de datos de desarrollo. es posible?Comprobación de los rieles a través del rake: no toques mi base de datos de desarrollo

Estoy en una situación en la que mis bases de datos prod/dev están fuera de host, pero a los fines de las pruebas unitarias estoy usando una base de datos sqlite en la memoria.

EDITAR por mis acciones exactas:Nota estoy usando Rails 2,3

Mi base de datos de prueba se configura como este en config/database.yml:

test: 
    adapter: sqlite3 
    database: 'sqlite3_unittest_file.dat' 
    pool: 5 
    timeout: 5000 

Cuando ejecuto el rake db:test:load La base de datos de prueba (que es solo un archivo) se genera correctamente en el directorio rails-root. Y cuando ejecuto rake test:units, todo funciona.

Ahora bien, si edito database.yml para establecer mi base de datos DEV nombre de usuario para algo mal (como 'sdlkfj'), rake test:units falla al instante quejándose:

Access denied for user 'sdlkfj'@'myhostnsmae' (using password: YES) 

cuando estoy corriendo esta acumulación 'de verdad' , Lo estoy ejecutando en un sistema en el que las construcciones no pueden hablar durante el proceso de compilación. Por lo tanto, este intento de hablar con la base de datos de desarrollo y croar al instante me está matando, y me parece incorrecto.

+0

Normalmente sus pruebas deberían funcionar sin una base de datos de desarrollo en ejecución. Debería echarle un vistazo a http://guides.rubyonrails.org/testing.html sección 3.1 y cambiar su pregunta para que pueda nombrar los pasos que sigue. Parece que la base de datos de desarrollo es necesaria al principio, y usted no la tiene disponible. – mliebelt

+0

Editado para agregar más información. –

Respuesta

7

intente ejecutar la tarea rastrillo con un entorno explícito:

rake test:units RAILS_ENV=test 

Si no se especifica un entorno, development se supone, en mi experiencia. Y mientras que la base de datos de prueba aún obtiene los datos del dispositivo insertados en ella, las cosas del entorno development aún se referencian por algún motivo.

+0

¡Eso funcionó! Muchas gracias. –

4

La razón por la que esto falla es porque 'prueba de rastrillo: unidades' intenta primero asegurarse de que la base de datos de prueba esté configurada correctamente. Para hacerlo, invoca 'rake db: test: prepare', que copia sobre el esquema actual desde la base de datos de desarrollo (supongo que para asegurar que todas las migraciones se hayan ejecutado antes de ejecutar las pruebas).

Supongo que puede evitar esto de varias maneras, una de las cuales está anulando la tarea de rake "db: test: prepare" que se ha sugerido en este post en stackoverflow.

Cuestiones relacionadas