2011-03-10 12 views
6

Desde Rails 3/Rspec 2, estoy intentando aprovechar la característica render_views de las especificaciones del controlador. El problema que me he encontrado es que acabamos de instalar la gema de buscapersonas kaminari, y quiero anular la llamada <%= paginate @sites %> desde mi vista, así que no tengo que anular manualmente todos los métodos internos que define kaminari en el colección para usar con el ayudante paginate.rspec: Respaldar una llamada al método auxiliar de una plantilla desde una especificación de controlador utilizando render_views

Si esto fue en una especificación de vista, podría apagar el método de ayuda llamando view.stub(:paginate), pero no puedo encontrar ninguna manera de conseguir una manija en el objeto vista desde un controlador de especificación (por ejemplo controller.view.stub(:paginate)). ¿Hay alguna manera de hacerlo, o tenemos la opción de deshabilitar render_views para este método, o resguardar algunos métodos internos de kaminari que no son relevantes para nosotros (ya que deberían estar cubiertos por las pruebas de kaminari, y podrían cambiar en versiones futuras)?

describe SitesController do 
    render_views 

    def mock_site(stubs={}) 
    @mock_site ||= mock_model(Site, stubs).as_null_object 
    end 

    describe "GET index" do 
    it "assigns all sites as @sites" do 
     Site.stub_chain("enabled.ordered.page") {[mock_site]} 
     # want to do something here like: controller.view.stub(:paginate) 
     get :index 
     assigns(:sites).should eq([mock_site]) 
    end 
    end 
end 

Respuesta

1

O no pude encontrar una solución adecuada. Es posible que desee investigar controller.view_context un poco más.

Lo que me conformé con (por ahora) es un parche mono en rspec/soporte/kaminari.rb:

module Kaminari::ActionViewExtension::InstanceMethods 
    def paginate(scope, options = {}, &block) 
    puts "Should test pagination" 
    end 
end 

Por lo tanto, en silencio falla paginación.

Cuestiones relacionadas