Я пытаюсь написать модульный тест для следующего фрагмента, чтобы убедиться, что URL-адрес создан правильно в соответствии с некоторыми логами c.
URL = '/abc/def?param1=val1' # some logic to create URL
http.request(Net::HTTP::Get.new(URL))
Когда я заглушил объект http с помощью Minitest и
expect :request, "some response", [EXPECTED_URL]
Minitest жалуется, что аргументы не совпадают. MockExpectationError: mocked method :request called with unexpected arguments [#<Net::HTTP::Get GET>]
Аргумент имеет тип Net :: HTTP :: Get GET, и когда я просматриваю минимальный код и сравниваю тело GET, они действительно одинаковы,
(byebug) args[0].to_yaml
"--- !ruby/object:Net::HTTP::Get\nmethod: GET\nrequest_has_body: false\nresponse_has_body: true\nuri: \npath: \"ACTUAL_URL\"\ndecode_content: true\nheader:\n accept-encoding:\n - gzip;q=1.0,deflate;q=0.6,identity;q=0.3\n accept:\n - \"*/*\"\n user-agent:\n - Ruby\nbody: \nbody_stream: \nbody_data: \n"
(byebug) expected_args[0].to_yaml
"--- !ruby/object:Net::HTTP::Get\nmethod: GET\nrequest_has_body: false\nresponse_has_body: true\nuri: \npath: \"EXPECTED_URL\"\ndecode_content: true\nheader:\n accept-encoding:\n - gzip;q=1.0,deflate;q=0.6,identity;q=0.3\n accept:\n - \"*/*\"\n user-agent:\n - Ruby\nbody: \nbody_stream: \nbody_data: \n"
однако "== Тесты «и» === не возвращают истину, и утверждение Minitest ожидаемого вызова не выполняется. Я подумал, что заглушка new и сравнение переданного параметра может быть другим подходом, но не уверен, каков будет синтаксис для него, и не смог найти никаких подходящих примеров minitest для того же. Кто-нибудь делал что-то подобное в прошлом?