Подтвердить что ты не робот

Проверить запрос 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://, когда ожидается.)

4b9b3361

Ответ 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. Никакого дополнительного тестирования не требуется; нет поломки; проблема решена.