2011-09-06 9 views
6

En mis rutas de archivo que tengo:¿Cómo puedo especificar el protocolo https en la especificación de enrutamiento con rspec?

resources :subscription, :only => [:show], :constraints => {:protocol => "https"} 

Estoy intentando añadir una especificación para esta ruta así:

it "recognizes and generates #show" do 
    { :get => "/subscription", :protocol => 'https' }.should route_to(:controller => "subscriptions", :action => "show") 
end 

Sin embargo, la especificación sigue fallando. Si quito el :protocol => 'https', la especificación también falla:

 
ActionController::RoutingError:  
    No route matches "/subscription" 

Respuesta

4

La solución es simplemente incluir toda una URL ficticia, así:

it "recognizes and generates #show" do 
    { :get => "https://test.host/subscription" }.should route_to(:controller => "subscriptions", :action => "show") 
end 

lo he descubierto desde this ticket y this changeset.

+4

Para que esto funcione, tuve que especificar la restricción como '{protocol =>" https: // "}', no simplemente '" https "' como podría esperarse. – cfeduke

-1

No estoy seguro, pero creo que las rutas deben ser declarados como plural - ver Rails Routing from the Outside In. Por lo que sería

resources :subscriptions 

y en la especificación

{:get => '/subscriptions', :protocol => 'https'} 

probar si que pasa sin :protocol. Si lo hace, omita las especificaciones con HTTPS. Eso no debería probarse en un nivel de prueba de unidad, sino en una prueba de integración.

+1

Estoy usando 'suscripción' como recurso singular. Vea la sección 2.5 en la guía que mencionó. –

+0

Lo siento, no pensé en eso. He agregado otra respuesta. – awendt

-1

¿Pasa si cambia a las especificaciones para esto ?:

{:get => '/subscription'}.should_not route_to(:controller => …) 

que por lo menos le dará la confianza de que HTTP no se encamina. (? Indocumentado)

Cuestiones relacionadas