ruby assert_equal неопределенный метод 'downcase' для 0..13: диапазон - PullRequest
0 голосов
/ 06 мая 2018

У меня есть модуль с именем 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 голосов
/ 06 мая 2018

Объект ответа имеет метод [], который обеспечивает доступ к заголовку из ответа . Когда вы пытаетесь сделать getToken[0..13], это метод, который на самом деле вызывается.

[] ожидает вызова, подобного response['Content-Type'], и использует downcase для передаваемого значения, чтобы обрабатывать имена заголовков без учета регистра.

Если вы хотите проверить первые несколько символов из строкового представления ответа, вы можете преобразовать ответ в строку и сравнить его следующим образом:

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

В качестве альтернативы, вы можете использовать утверждение в коде статуса HTTP, например,

assert_equal(200, Tokenwrapper.getToken.code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...