RSpec - 如何在所有请求测试中全局设置 https 协议(protocol)

标签 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 协议(protocol)?

最佳答案

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

  1. 要为所有 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

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

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

    关于RSpec - 如何在所有请求测试中全局设置 https 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199048/

    相关文章:

    ruby-on-rails - 如何使用 RSpec 和 Capybara 单击图像作为链接

    ruby-on-rails - RSpec not_to 未显示正确的结果

    ruby - 如何使用 rest-client 资源检查响应代码

    ruby-on-rails - 工厂女孩和回形针附件

    ruby-on-rails - Rspec:测试嵌套销毁操作

    ruby-on-rails - Capybara::ExpectationNotMet,链接不合适

    ruby-on-rails - 测试失败,即使它正在测试的东西正在通过

    ruby-on-rails - stub 模型常量以进行关联(未定义方法 `relation_delegate_class' )

    ruby - 针对 Ruby 规范强制 GC

    ruby - capybara rspec 脚本未在描述 block 中执行