ruby-on-rails ssl https rspec ruby-on-rails-3.1

ruby on rails - Probar una solicitud HTTPS(SSL) en RSpec Rails



ruby-on-rails ruby-on-rails-3.1 (3)

Me gustaría aprovechar la función force_ssl en los rieles 3.1rc4.

class ApplicationController < ActionController::Base force_ssl end

El problema es que esto rompe la mayoría / todas mis especificaciones de controlador RSpec existentes. Por ejemplo, esto falla:

describe "GET ''index''" do it "renders the Start page" do get :index response.should render_template ''index'' end end

En lugar de mostrar la página, la respuesta es un redireccionamiento 301 a https://test.host/ .

¿Cómo puedo cambiar mis especificaciones para simular un HTTPS GET / POST?

¿Y tengo que cambiar cada prueba manualmente o hay una manera más fácil? (Me doy cuenta de que podría invocar a force_ssl solo en producción, pero eso no es lo ideal. Realmente, debería probar que force_ssl redirige a https: // cuando se espera).


Para indicar a RSpec que realice solicitudes SSL en una especificación de controlador, use:

request.env[''HTTPS''] = ''on''

En tu ejemplo, esto parece:

describe "GET ''index''" do it "renders the Start page" do request.env[''HTTPS''] = ''on'' get :index response.should render_template ''index'' end end


Para la sintaxis de rspec 3, https://.com/a/28361428/1107433

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

Puede haber una versión ligeramente diferente que el código anterior no funciona. Entonces usa el código a continuación:

get :index, protocol: :https


Si necesita SSL, en cualquier lugar de su aplicación, debe usarlo en cualquier parte de su aplicación. Entonces todo lo que necesita es usar la gema rack-ssl y agregar el middleware Rack::SSL a su config/environments/production.rb . No se necesitan pruebas adicionales; no se rompe problema resuelto.