Probar una solicitud HTTPS (SSL) en RSpec Rails

Me gustaría aprovechar la función force_ssl en los Rails 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 representar 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 syntax de rspec 3, https://stackoverflow.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 gem rack-ssl y agregar el middleware Rack::SSL a su config/environments/production.rb . No se necesitan pruebas adicionales; no se rompe problema resuelto.