Тестирование запроса HTTPS (SSL) в RSpec Rails

17

Я хотел бы воспользоваться функцией 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: //, когда ожидается.)

    
задан naudster 22.07.2011 в 05:12
источник

3 ответа

39

Чтобы указать 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
    
ответ дан Will Koehler 29.11.2011 в 03:18
источник
2

Для синтаксиса rspec 3 Ссылка

get :index, protocol: 'https://'

Возможно, существует небольшая версия, которая не работает над кодом. Поэтому используйте следующий код:

get :index, protocol: :https     

ответ дан Thaichor Seng 06.02.2015 в 09:28
источник
0

Если вам нужен SSL вообще, в любом месте приложения, вы должны использовать его везде в своем приложении. Тогда вам понадобится использовать rack-ssl gem и добавить промежуточное ПО Rack::SSL к вашему config/environments/production.rb . Никакого дополнительного тестирования не требуется; нет поломки; проблема решена.

    
ответ дан yfeldblum 22.07.2011 в 05:16
источник