【问题标题】:Functional test "get" requests and the https protocol功能测试“获取”请求和 https 协议
【发布时间】:2010-09-29 01:59:53
【问题描述】:

我正在尝试为必须通过 https 运行的操作编写功能测试。我没有在测试 HTTPS 重定向 - 我已经知道它在另一个测试中有效。

我想做的是:

get :new, :protocol => "https://"
assert_redirected_to :root

但这不会通过 https 发出请求。是否有允许我更改协议的“获取”选项?

另外,如果我尝试指定 url(例如:get "https:/test.host/do/something")我会收到一个路由错误,因为在我的 Rails 级别没有 https 的路由 - 它已经处理好了在我的网络服务器级别。

【问题讨论】:

    标签: ruby-on-rails get functional-testing


    【解决方案1】:

    我在这里找到了一个更简单的答案: http://railspikes.com/2008/9/12/testing-ssl

    将以下行放在 (a) 需要 SSL 的每个功能测试的开头,或者 (b) 如果控制器中的每个操作都使用 SSL,则放在“设置”方法中。

    @request.env['HTTPS'] = 'on'
    

    这会在所有请求前添加 https

    【讨论】:

      【解决方案2】:

      在功能测试中,没有来自 HTTP 或其他任何东西的路由,它直接使用控制器。因此,您无法测试来自 HTTP 或 HTTPS 的内容。

      但你可以模拟 request.protocole 并将其定义为“https”

      request.stub(:protocol).and_return("https://")
      get :new
      

      【讨论】:

      • 谢谢。我最终采取了一种存根方法来删除此类的 SSL 要求,但仅限于“测试”环境。我知道这个选项也可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多