ruby assert_equal undefined方法'downcase'为0..13:Range

时间:2018-05-06 20:23:31

标签: ruby api http

我有一个名为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响应以及这个网络区域如何运作,所以我很感激任何资源以及这个问题的答案。

1 个答案:

答案 0 :(得分:2)

响应对象的[]方法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)