Есть ли способ проверить, какой аргумент вызывается с помощью - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь написать модульный тест для следующего фрагмента, чтобы убедиться, что 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 для того же. Кто-нибудь делал что-то подобное в прошлом?

...