2009-05-29 10 views
10

tengo una serie de tareas en el rastrillo de un Rakefile la que me gustaría probar como parte de las especificaciones de mi etc. Cada tarea se define en la forma:¿Puedo anular tarea: entorno en test_helper.rb para probar tareas de rake?

task :do_somthing => :environment do 
    # Do something with the database here 
end 

Cuando el: tarea ambiente establece un ActiveRecord/Conexión y clases de la base de datos DataMapper. No estoy usando esto como parte de Rails, pero tengo una serie de pruebas que me gusta ejecutar como parte de BDD.

Este fragmento ilustra cómo estoy tratando de probar las tareas de rake.

def setup 
    @rake = Rake::Application.new 
    Rake.application = @rake 
    load File.dirname(__FILE__) + '/../../tasks/do_something.rake' 
end 

should "import data" do 
    @rake["do_something"].invoke 
    assert something_in_the_database 
end 

Así que mi solicitud de ayuda - ¿es posible pasar por encima de la: tarea ambiente en mi archivo test_helper.rb así que mis pruebas rastrillo interactúa con la base de datos de mi prueba, en lugar de la producción? He intentado redefinir la tarea en el archivo auxiliar, pero esto no funciona.

Cualquier ayuda para una solución sería genial, ya que he estado atascado en esto la semana pasada.

Respuesta

8

Mi "solución" a un problema similar fue extraer toda la lógica de mis archivos .rake y crear clases para realizar las tareas, dejando solo una llamada de una línea en el archivo de rake, que confiaba en no probar demasiado duro. Las clases podrían ser probadas más o menos normalmente.

No sé qué tan bien podría hacer frente a un complejo conjunto de tareas interdependientes que mantienen un estado de largo alcance: probablemente no sea bueno, pero de nuevo eso sería una indicación de algún otro problema de diseño. ..

Tengo curiosidad por ver si me he perdido algo mejor.

EDITAR: Hubo una publicación en el blog here que (a) dice lo mismo y (b) lo dice mejor. Parece que él también lo dijo primero.

+0

Gracias por su respuesta Mike. Mientras tanto, he estado jugando un poco más con Rake, y creo que estos dos métodos en test_helper.rb podrían ser una solución. def rake_up Rake.application = Rake :: Application.new Rake :: Task.define_task: medio ambiente Rake.application final rake_down def Rake.application = nil final –

+0

Aparece el enlace a esa entrada en el blog estar muerto. El único lugar donde pude encontrar el contenido está aquí: [Qué poner en las tareas de Rake] (http://www.artima.com/forums//threaded.jsp?forum=123&thread=251328) – ThomasW

0

cuando está ejecutando el entorno de pruebas es que se está cargando es prueba.

por lo que está interactuando con la prueba base de datos solamente.

así que no veo ninguna razón para anular su tarea en el rastrillo de test_helper.rb

1

Creo que busca esta línea: requieren (File.join (RAILS_ROOT, 'config', 'medio ambiente')) es exactamente lo que se encuentra en la "tarea: medio ambiente" aplicación

lo uso para poner a prueba mis tareas rastrillo utilizando rspec

Cuestiones relacionadas