使用RSpec测试HTTPS(SSL)请求的简单方法

Bre*_*din 2 ruby rspec sinatra

我希望Rspec使用https请求root.这就是我目前拥有的:

it "requesting root (/) with HTTPS should return 200" do
  get "https://test.host/"
  last_response.should be_ok
end
Run Code Online (Sandbox Code Playgroud)

尝试在RSpec Rails测试HTTPS(SSL)请求中提出的解决方案会返回以下错误:

wrong number of arguments (0 for 1)
Run Code Online (Sandbox Code Playgroud)

我想我可以这样做:

get "/", :https => "on"
Run Code Online (Sandbox Code Playgroud)

有没有办法在不指定主机的情况下请求root用户?

nba*_*lle 5

使用Sinatra和RSpec时,您使用的是#get/#post提供的方法Rack::Test,因此我建议您查看它们的工作原理:https://github.com/brynary/rack-test/blob/master/lib/rack/test. RB

如您所见,它们采用可选的envHash,您可以将"HTTPS"设置为"on",如下所示:

get '/', {}, {'HTTPS' => 'on'}
Run Code Online (Sandbox Code Playgroud)

如果你想默认为你的所有请求设置它,你需要覆盖该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
Run Code Online (Sandbox Code Playgroud)