我希望Rspec使用https请求root。这就是我目前所拥有的:
it "requesting root (/) with HTTPS should return 200" do
get "https://test.host/"
last_response.should be_ok
end
尝试在Test an HTTPS (SSL) request in RSpec Rails中提出的解决方案会返回以下错误:
wrong number of arguments (0 for 1)
我认为我可以做类似的事情:
get "/", :https => "on"
有没有办法在不指定主机的情况下请求root?
答案 0 :(得分:5)
使用Sinatra和RSpec时,您使用#get/#post
提供的Rack::Test
方法,因此我建议您查看它们的工作原理:https://github.com/brynary/rack-test/blob/master/lib/rack/test.rb
正如您所看到的,他们选择了env
Hash,您可以将“HTTPS”设置为“on”,如下所示:
get '/', {}, {'HTTPS' => 'on'}
如果您要为所有请求默认设置它,则需要覆盖Rack::Test::Session#default_env
方法,并'HTTPS' => 'on'
方法(我建议您在spec_helper.rb
中执行此操作) ,像这样:
class Rack::Test::Session
def default_env
{ "rack.test" => true, "REMOTE_ADDR" => "127.0.0.1", "HTTPS" => 'on' }.merge(headers_for_env)
end
end
答案 1 :(得分:4)
Rack::Test:Session
更改的上一个答案在rails 4.1.1中对我不起作用。相反,我现在使用Rails RSpec绑定强制将所有集成测试强制转换为https。为此,请将以下代码添加到spec_helper.rb
:
class ActionDispatch::Integration::Session
def https?
true
end
end