代码之家  ›  专栏  ›  技术社区  ›  Shani

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

  •  0
  • Shani  · 技术社区  · 6 年前
    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 回复  |  直到 6 年前
        1
  •  1
  •   HelloAndThankYou    6 年前

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

    1. 要为所有rspec示例设置“https”,请创建一个文件,如 规范/支持/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. 对于站点范围的配置,您可以将以下内容添加到 配置/环境/测试.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