2011-09-06 6 views
6

Nei miei percorsi di file che ho:Come posso specificare il protocollo https nelle specifiche del routing con rspec?

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

Sto cercando di aggiungere una specifica per questa rotta in questo modo:

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

Tuttavia, le specifiche non riesce ancora. Se rimuovo il :protocol => 'https', la specifica fallisce anche:

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

risposta

4

La soluzione è quella di includere semplicemente un intero URL fittizio, in questo modo:

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

ho capito da this ticket e this changeset.

+4

Per far funzionare tutto questo dovevo specificare il vincolo come '{protocol =>" https: // "}', non semplicemente '" https "' come ci si aspetterebbe. – cfeduke

-1

Non sono sicuro, ma penso percorsi devono essere dichiarate come plurale - vedi Rails Routing from the Outside In. Quindi sarebbe

resources :subscriptions 

e nelle specifiche

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

Prova se che passa senza :protocol. Se lo fa, salta la specifica con HTTPS. Questo non dovrebbe essere testato a livello di unit test, ma in un test di integrazione.

+1

Sto usando 'abbonamento' come risorsa singolare. Vedere la sezione 2.5 nella guida che hai citato. –

+0

Scusa, non ci ho pensato. Ho aggiunto un'altra risposta. – awendt

-1

lo fa passare se si cambia a spec a questo ?:

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

Questo sarebbe almeno dare la fiducia che HTTP non viene instradato. (? Non documentato)