¿Puedo anular tarea: entorno en el test_helper.rb para probar las tareas rake?
Pregunta
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:
task :do_somthing => :environment do
# Do something with the database here
end
Cuando el: tarea ambiente establece una conexión a la base de datos y las clases ActiveRecord / DataMapper. No estoy usando esto como parte de los carriles, pero tengo una serie de pruebas que me gusta para funcionar como parte de BDD.
Este fragmento ilustra la forma en que estoy tratando de probar las tareas del rastrillo.
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 tratado de redefinir la tarea en el archivo de ayuda, pero esto no funciona.
Cualquier ayuda para una solución sería genial, ya que he estado atrapado en esto durante la última semana.
Solución
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 sólo una llamada de una línea en el archivo de rastrillo, que me sentí seguro en pruebas no demasiado difícil. Las clases podrían entonces ser probados más o menos normalmente.
No sé lo bien que se ponía de pie a un complejo conjunto de tareas interdependientes que mantienen un estado de gran envergadura: probablemente no está bien, pero una vez más que lo más probable es ser una indicación de algún otro problema de diseño .. .
Tengo curiosidad por ver si me he perdido algo mejor.
EDIT: No solía ser un blog aquí que (a) dice lo mismo y (b) lo dice mejor. Parece que lo dijo primero, también.
Otros consejos
Creo que busca esta línea: require (File.join (RAILS_ROOT, 'config', 'medio ambiente')) que es exactamente lo que se encuentra en la "tarea: medio ambiente" aplicación
Lo utilizo para probar mis tareas rastrillo utilizando rspec
cuando se está ejecutando entorno de pruebas es que está siendo cargado es de prueba.
lo que está interactuando con la prueba única base de datos.
Así que no veo ninguna razón para anular su tarea en el rastrillo de test_helper.rb