Протестируйте HTTPS (SSL) запрос в RSpec Rails - PullRequest
18 голосов
/ 22 июля 2011

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

Ответы [ 3 ]

42 голосов
/ 29 ноября 2011

Для указания 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 голосов
/ 06 февраля 2015

Для синтаксиса rspec 3: https://stackoverflow.com/a/28361428/1107433

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

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

get :index, protocol: :https

0 голосов
/ 22 июля 2011

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

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