RSpec.describe "Home", type: :request do
describe "GET /index" do
it "is a success" do
get root_path, {}, {'HTTPS' => 'on'}
expect(response).to have_http_status(200)
end
end
end
Rspec 版本 - 3.8 测试类型 - 请求规范
如何在所有请求规范上全局设置 https 协议(protocol)?
最佳答案
您可能正在使用 Rails,在这种情况下您可以执行以下操作之一:
- 要为所有 Rspec 示例设置“https”,请创建一个文件,例如 spec/support/url_options.rb,其中包含以下内容:
RSpec.configure do |config|
Rails.application.routes.default_url_options[:protocol] = 'https'
end
- 要仅定位请求规范,您可以使用 Hook ,例如:
RSpec.configure do |config|
config.before(:all, type: :request) do
Rails.application.routes.default_url_options[:protocol] = 'https'
end
end
- 对于站点范围的配置,您可以将以下内容添加到 config/environments/test.rb:
Rails.application.configure do
default_url_options[:protocol] = 'https'
end
这对于请求规范来说应该可以正常工作,但功能规范可能会出现其他复杂情况。在这种情况下,请参阅https://github.com/rspec/rspec-rails/issues/1275 .
如果您不使用 Rails,您仍然可以遵循上面的大致模式,但替换框架的等效方法或配置设置。如果所有其他方法都失败,您可以重写 Rspec 方法 get()、post() 等,并在重写的方法中只需调用 super()
与 { protocol: 'https' }
或{ 'HTTPS' => 'on' }
合并到参数中。
另外,请注意 'HTTPS' => 'on'
可能已被弃用,取而代之的是 protocol: 'https'
.
具有其他可能性的类似帖子:
Test an HTTPS (SSL) request in RSpec Rails
关于RSpec - 如何在所有请求测试中全局设置 https 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199048/