2011-07-12 6 views
8

Para un controlador que determina el comportamiento de una barra lateral, necesito llamar a varias URL; la barra lateral cambiará (a.o) en función de la página en la que aparece.OBTENER una url o ruta, proporcionada como cadena, en una prueba de rspec

describe SidebarController do 
    before(:each) do 
    @sidebar = SidebarController.new 
    end 
    it 'should return :jobseekers for root_path' do 
    get(root_url) 
    @sidebar.section(root_path).should eq :jobseekers 
    end 
end 

Esto, sin embargo, falla con ActionController::RoutingError: No route matches {:controller=>"sidebar", :action=>"http://test.host/"}

¿Puedo get una URL o una como cadena? ¿Existe alguna manera más inteligente de configurar los datos request., en lugar de OBTENERLO?

Respuesta

15

¿Puedo obtener una url o ruta como cadena?

No en una prueba de controlador. El controlador de prueba no está procesando una URL, está configurando la prueba usando uno de los 5 tipos de solicitud de soporte (get, post, put, head, delete) y luego llamando a la acción apropiada del controlador. Vea el Guide to Testing Rails Applications.

Lo que está buscando es una prueba de integración, o un "request spec" en términos de RSpec.

7

Aquí hay una solución ... en caso de que quería hacer esto ... no es necesariamente la mejor manera, pero de una manera .. Esto funciona en los carriles 3.2 ...

module ActionController::TestCase::Behavior 
    #just parse the url and then call the regular get method 
    def get_path(path) 
    parsed_params = Rails.application.routes.recognize_path path 
    controller = parsed_params.delete(:controller) 
    action = parsed_params.delete(:action) 
    get(action, parsed_params) 
    end 
end 
Cuestiones relacionadas