【问题标题】:ruby assert_equal undefined method 'downcase' for 0..13:Rangeruby assert_equal 未定义方法'downcase' 0..13:Range
【发布时间】:2018-10-16 16:03:38
【问题描述】:

我有一个叫做token wrapper的模块,里面有一个方法getToken

def Tokenwrapper.getToken
  uri = URI.parse("[URL REDACTED]/api/authenticate")
  request = Net::HTTP::Post.new(uri)
  request.basic_auth("email@domain.com", "pass")
  request.content_type = "application/json"
  request["Accept"] = "application/json" 
  req_options = {
    use_ssl: uri.scheme == "https",
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
 end
 response
end

当我尝试使用以下断言对其进行测试时:

assert_equal("#<Net::HTTPOK:",Tokenwrapper.getToken[0..13])

我收到此错误:

NoMethodError: undefined method 'downcase' for 0..13:Range

我没有手动调用 downcase 方法,我看不出 ruby​​ 应该自动调用的任何理由。为什么会发生这种情况?如何让我的测试运行?

老实说,我对 HTTP API 响应以及该网络领域的运作方式知之甚少,因此我希望能提供任何资源以及此问题的答案。

【问题讨论】:

    标签: ruby api http


    【解决方案1】:

    响应对象有一个[] 方法,即provides access to a header from the response。当您尝试执行 getToken[0..13] 时,这就是实际调用的方法。

    这个[] 期待像response['Content-Type'] 这样的调用,并在传入的值上使用downcase,以便不区分大小写地处理标题名称。

    如果您想检查响应的字符串表示中的前几个字符,您可以将响应转换为字符串并进行比较,如下所示:

    assert_equal("#<Net::HTTPOK:",Tokenwrapper.getToken.to_s[0..13])
    

    或者,您可以在 HTTP 状态代码上使用断言吗,例如

    assert_equal(200, Tokenwrapper.getToken.code)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多