I'd like to take advantage of the force_ssl
feature in rails 3.1rc4.
class ApplicationController < ActionController::Base
force_ssl
end
Problem is this breaks most/all of my existing RSpec controller specs. For example, this fails:
describe "GET 'index'" do
it "renders the Start page" do
get :index
response.should render_template 'index'
end
end
Instead of rendering the page the response is a 301 redirect to https://test.host/
.
How can I change my specs to simulate an HTTPS GET/POST?
And do I have to change each test manually or is there an easier way? (I realise I could invoke force_ssl
only in production, but that's not ideal. Really, I should be testing that force_ssl
does indeed redirect to https:// when expected.)
To instruct RSpec to make SSL requests in a controller spec use:
request.env['HTTPS'] = 'on'
In your example this looks like:
describe "GET 'index'" do
it "renders the Start page" do
request.env['HTTPS'] = 'on'
get :index
response.should render_template 'index'
end
end
For rspec 3 syntax, https://stackoverflow.com/a/28361428/1107433
get :index, protocol: 'https://'
There may be a slight different version that above code doesn't work. So use code below:
get :index, protocol: :https
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With