Как я могу указать протокол https в спецификации маршрутизации с помощью rspec? - PullRequest
6 голосов
/ 06 сентября 2011

В моем файле маршрутов у меня есть:

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

Я пытаюсь добавить спецификацию для этого маршрута следующим образом:

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

Однако, спецификация все еще не работает. Если я удаляю :protocol => 'https', спецификация также терпит неудачу:

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

Ответы [ 3 ]

4 голосов
/ 04 сентября 2012

Решение (недокументированное?) Состоит в том, чтобы просто включить весь фиктивный URL, например:

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

Я понял это из этого билета и этого набора изменений .

0 голосов
/ 06 сентября 2011

Пройдет ли это, если вы перейдете к этой спецификации?:

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

Это, по крайней мере, даст вам уверенность в том, что HTTP не маршрутизируется.

0 голосов
/ 06 сентября 2011

Я не уверен, но я думаю, что маршруты должны быть объявлены во множественном числе - см. Маршрутизация от внешней стороны .Так что это будет

resources :subscriptions

и в спецификации

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

Попробуйте, если это пройдет без :protocol.Если это так, пропустите спецификацию с HTTPS.Это следует проверять не на уровне юнит-теста, а на интеграционном тесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...