Question

Dans mes itinéraires fichier je:

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

Je suis en train d'ajouter une spécification pour cette route comme ceci:

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

Cependant, la spécification ne fonctionne toujours pas. Si je supprime la :protocol => 'https', la spécification échoue également:

ActionController::RoutingError:    
  No route matches "/subscription" 
Était-ce utile?

La solution

La solution (? Non documentée) est d'inclure simplement une URL factice entier, comme ceci:

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

I figured it out ce billet et cette changeset.

Autres conseils

Je ne suis pas sûr, mais je pense que les itinéraires doivent être déclarés au pluriel - voir Rails d'acheminement de l'extérieur . Il serait donc

resources :subscriptions

et dans la spécification

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

Essayez si ça passe sans :protocol. Dans le cas contraire, passez la spécification avec le protocole HTTPS. Cela ne devrait pas être testé sur un niveau de test d'unité, mais dans un test d'intégration.

Est-ce que passer si vous changez de spécification à ceci:

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

Ce serait au moins vous donner la confiance que HTTP ne transite pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top