2

我希望 Rspec 使用 https 请求根目录。这是我目前拥有的:

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

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

wrong number of arguments (0 for 1)

我会假设我可以做类似的事情:

get "/", :https => "on"

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

4

2 回答 2

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'}

如果您想为所有请求默认设置它,则需要覆盖该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
于 2013-04-18T18:26:35.673 回答
4

先前的更改答案Rack::Test:Session在 rails 4.1.1 中对我不起作用。相反,我现在使用 Rails RSpec 绑定来强制所有集成测试进入 https。为此,将以下代码添加到spec_helper.rb

class ActionDispatch::Integration::Session
  def https?
    true
  end
end
于 2014-06-19T04:29:06.717 回答