Echolot
Командная строка и CI

echolot mock

Поднимите мок из терминала или в CI — из маршрутов рабочего пространства, созданных вручную, или из документа OpenAPI — с задержками, искусственными сбоями и проверкой запросов.

echolot mock поднимает мок: либо мок, сохранённый в рабочем пространстве, с его маршрутами, созданными вручную, и со спецификацией, если она есть, либо документ OpenAPI, операции которого отвечают задокументированными примерами или телом, построенным по их схеме. Используйте его, чтобы писать клиент до появления API или чтобы дать заданию CI сервер, который отвечает так, как вам нужно. Он обслуживает те же моки, что и страница «Моки».

echolot mock <source> [--workspace <workspace>] [--port <port>] [--share] [--delay <ms>] [--failure-rate <percent>] [--no-validate] [--routes <file>]

<source> — это файл спецификации (YAML или JSON), а с --workspace — имя мока, сохранённого в этом рабочем пространстве.

Мок спецификации

echolot mock Alpenglow.echolot/specs/alpenglow.yaml --port 4010
Mock of Alpenglow demo shop: 9 operations at http://127.0.0.1:4010/v1 (Ctrl-C stops it)

Мок отвечает по пути первого сервера спецификации (здесь /v1). Каждый запрос, на который он отвечает, — строка в стандартном выводе: статус, метод и путь, подошедшая операция, откуда взялся ответ и время. Проблемы запроса перечислены под ней.

200 GET /v1/products/TNT-MH-2P  → GET /products/{sku} (generated)  0 ms
400 POST /v1/orders  → POST /orders  0 ms
    body $.lines: expected array, got string

Запросы проверяются по спецификации. Запрос, параметры или тело которого нарушают спецификацию, получает 400 с объяснением, что не так:

{
  "error" : "The request does not match the spec (POST /orders).",
  "problems" : [
    "body $.lines: expected array, got string"
  ]
}

--no-validate отвечает на такие запросы всё равно.

Выбор ответа. По умолчанию операция отвечает своим первым успешным ответом и первым примером. Запрос может потребовать другой с помощью Prefer: code=404, example=empty или заголовков Postman x-mock-response-code и x-mock-response-name.

Мок рабочего пространства

С --workspace <source> называет мок, сохранённый на странице «Моки» (имя его файла в mocks/ без .toml или его имя). Его порт, задержка, доля сбоев, проверка запросов, выбранные ответы и маршруты действуют, а указанные вами параметры их переопределяют. Его маршруты на JavaScript (mocks/<name>.js) отвечают первыми, затем маршруты, созданные вручную, затем спецификация; см. скриптовые маршруты и маршруты и тестовые данные.

echolot mock shop -w Alpenglow.echolot --delay 300

Моку из маршрутов спецификация не нужна:

echolot mock storefront -w Shop.echolot
Mock of Storefront: 3 routes at http://127.0.0.1:4321 (Ctrl-C stops it)
200 GET /users/42  → GET /users/{id} (OK)  1 ms
404 GET /users/0  → GET /users/{id} (Not found)  0 ms

Каждая строка называет маршрут, который ответил, и в скобках — ответ, который он дал. Тестовые значения в телах создаются заново для каждого запроса. Чтобы создавать тестовые данные без сервера, см. echolot fake.

Параметры

ПараметрЗначение
-w, --workspace <folder>Папка рабочего пространства, где лежит мок.
--port <port>Порт. По умолчанию — собственный порт мока или 4010.
--shareОтвечать на всех сетевых интерфейсах, а не только на этом Mac: для контейнеров и телефонов.
--delay <ms>Миллисекунд перед каждым ответом.
--failure-rate <percent>Доля запросов в процентах, на которые отвечают искусственной ошибкой 500.
--no-validateОтвечать на запросы, нарушающие спецификацию, вместо того чтобы отклонять их с 400.
--routes <file>Маршруты на JavaScript, которые отвечают раньше спецификации. По умолчанию — mocks/<name>.js мока рабочего пространства.

Без --share мок слушает только 127.0.0.1, поэтому ничто другое в сети до него не достанет. С --share достанет любой, кто может добраться до вашего Mac.

Тело запроса сверх лимита мока получает 413 и до маршрута не доходит.

В CI

Запустите мок в фоне и выполняйте прогон на нём. Окружение Alpenglow Local направляет {{baseURL}} на http://localhost:8787/v1, поэтому мок на порту 8787 отвечает на его запросы:

echolot mock Alpenglow.echolot/specs/alpenglow.yaml --port 8787 &
echolot run Alpenglow.echolot --env local --folder catalog
kill %1

Коды выхода

Мок работает, пока вы его не остановите. Он завершается с кодом 64 при неверном параметре или имени мока, которого нет в рабочем пространстве, и с кодом 1, когда спецификацию не удалось прочитать или порт занят.

На этой странице