RSpec-如何在所有请求测试上全局设置https协议

时间:2018-11-07 22:45:04

标签: rspec

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协议?

1 个答案:

答案 0 :(得分:1)

您可能正在使用Rails,在这种情况下,您可以执行以下操作之一:

  1. 要为所有Rspec示例设置“ https”,请创建一个文件,例如 spec / support / url_options.rb ,其中包含以下内容:
RSpec.configure do |config|
  Rails.application.routes.default_url_options[:protocol] = 'https'
end
  1. 要仅定位请求规范,可以使用钩子,例如:
RSpec.configure do |config|
  config.before(:all, type: :request) do
    Rails.application.routes.default_url_options[:protocol] = 'https'
  end
end
  1. 对于站点范围的配置,您可以改为将以下内容添加到 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

Simple way to test an HTTPS (SSL) request with RSpec

Force HTTPS/SSL for all controller/request specs in rspec