2011-09-06 20 views
6

W moich trasach pliku mam:Jak mogę określić protokół https w specyfikacji routingu z rspec?

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

Próbuję dodać specyfikację dla tej trasy tak:

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

Jednak spec nadal kończy się niepowodzeniem. Jeśli usunąć :protocol => 'https', spec nie również:

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

Odpowiedz

4

Rozwiązaniem jest po prostu obejmować całą atrapę URL, tak jak poniżej:

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

wyobraziłem go z this ticket i this changeset.

+4

Aby to działało, musiałem określić ograniczenie jako '{protocol =>" https: // "}', a nie po prostu '" https "' jak można się spodziewać. – cfeduke

-1

Nie jestem pewien, ale myślę, że trasy powinny być zadeklarowane jako mnogiej - patrz Rails Routing from the Outside In. Więc byłoby

resources :subscriptions 

iw spec

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

Spróbuj jeśli przechodzi bez :protocol. Jeśli tak, pomiń specyfikację za pomocą protokołu HTTPS. To nie powinno być testowane na poziomie testu jednostkowego, ale w teście integracyjnym.

+1

Używam "subskrypcji" jako osobnego zasobu. Zobacz punkt 2.5 w przewodniku, o którym wspomniałeś. –

+0

Przepraszam, nie pomyślałem o tym. Dodałem kolejną odpowiedź. – awendt

-1

Czy to minie, jeśli zmienisz spec do tego ?:

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

To by przynajmniej dać Ci pewność, że HTTP nie są kierowane. (? Nieudokumentowane)

Powiązane problemy