Проверить запрос HTTPS (SSL) в RSpec Rails
Я хотел бы воспользоваться функцией force_ssl
в rails 3.1rc4.
class ApplicationController < ActionController::Base
force_ssl
end
Проблема заключается в том, что это нарушает большинство/всех моих существующих спецификаций контроллера RSpec. Например, это не удается:
describe "GET 'index'" do
it "renders the Start page" do
get :index
response.should render_template 'index'
end
end
Вместо того, чтобы отображать страницу, ответ перенаправляет 301 на https://test.host/
.
Как я могу изменить свои спецификации для имитации HTTPS GET/POST?
И нужно ли менять каждый тест вручную или проще? (Я понимаю, что могу использовать force_ssl
только в производстве, но это не идеально. Действительно, я должен тестировать, что force_ssl
действительно перенаправляет на https://, когда ожидается.)
Ответы
Ответ 1
Чтобы указать RSpec, чтобы запросы SSL в спецификации контроллера использовались:
request.env['HTTPS'] = 'on'
В вашем примере это выглядит так:
describe "GET 'index'" do
it "renders the Start page" do
request.env['HTTPS'] = 'on'
get :index
response.should render_template 'index'
end
end
Ответ 2
Для синтаксиса rspec 3 fooobar.com/questions/302942/...
get :index, protocol: 'https://'
Возможно, существует небольшая версия, которая не работает над кодом. Поэтому используйте следующий код:
get :index, protocol: :https
Ответ 3
Если вам нужен SSL вообще, в любом месте приложения, вы должны использовать его везде в своем приложении. Тогда вам понадобится использовать драгоценный камень rack-ssl
и добавить промежуточное ПО Rack::SSL
к вашему config/environments/production.rb
. Никакого дополнительного тестирования не требуется; нет поломки; проблема решена.