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.