2012-10-02 22 views
16

Estoy tratando de probar una tarea de rake y usa un registro activo en ella.Prueba de la tarea de Rake con Rspec con el entorno Rails

require 'spec_helper' 
require 'rake' 

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') 

describe "survey rake tasks" do 
    describe "survey:send_report" do 
    it "should send a report" do 
     Rake::Task['survey:send_report'].invoke 
    end 
    end 
end 

Cuando ejecuto esta especificación rspec spec/lib/survey_spec.rb, me sale este error "

RuntimeError: 
    Don't know how to build task 'environment' 

¿Cómo se carga el:? Tarea ambiente interior de ejemplo de especificaciones

+0

Esta guía parece que puede ayudar a: http://www.philsergi.com/2009/02/testing-rake- tasks-with-rspec.html –

Respuesta

1

es la tarea de añadir el: ambiente para hacerlo antes? En su archivo .rake debe tener algo como esto:

namespace :survey do 
# ... 

task :send_report => :enviroment do 
# ... stuff 
end 

Esto se debe a que necesita cargar todo el entorno para realizar esa tarea. Esto se puede comprobar railcast para obtener más información http://railscasts.com/episodes/66-custom-rake-tasks

8

Sospecho que el problema es que su tarea survey:send_report depende de :environment pero no se ha cargado el archivo que define la tarea :environment. Eso estará en raíles en alguna parte, y tu principal Rakefile lo carga.

Por lo tanto, creo que si cambia

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') 

a

load File.join(Rails.root, 'Rakefile') 

que va a trabajar.

30

creo que primero debe cargar las tareas:

require 'rake' 
MyRailsApp::Application.load_tasks 

y luego llamar a su tarea:

Rake::Task['survey:send_report'].invoke 
+1

¿Qué es 'MyRailsApp'? –

+1

@ZackXu ese es el nombre de tu aplicación, puedes verlo en 'config/application.rb' – Davidslv

6

suena como su toma puede necesitar los rieles entorno para ser cargado tarea. Puede stub esto mediante la adición de esta línea a su antes (: todos) de gancho:

Rake::Task.define_task(:environment) 
Cuestiones relacionadas