stub-maker v0.0.1
Stub Maker:
Module with helpers for making stubs for mbtest.org server
Модуль создает моки на основе подготовленных данных в json формате.
Создание моков разделяется на 2 части
Часть 1
Функция берет адрес папки с сервисом, создавая список путей к файлам с данными для мока
Допустим у вас есть сервис, в котором есть необоходимость при куке testId=rick отвечать определенным образом
Вы создаете папку с названием этого сервиса, например group/. Именно этот адрес будет использоваться в функции makeStub.
Внутри папки обязательно должна находится папка responses (group/responses) В ней находятся папки с подготовленными json файлами.
При этом названия папок и файлов является критичным При переобразовании пара папка/файл, превращается в куку "папка=файл", например:
Cоздав папку group/responses/testId/rick.json в мок добавится условие с хедером "cookie: testId=rick"
Если в папке находится файл default.json - он используется как стандартный ответ на запрос в этот сервис
Часть 2
Из списка путей к файлам по одному передаются в функцию формирования стаба, который распарсив json создает на его основе мок
Как выглядит файл
Файл представляет из себя массив с массивами в котором содержатся объекты с данными.
[
[
{
},
{
}
]
]
Каждый массив является отдельным моком, при этом если он лежит в папке то ко всем из них будут доавлены условия с кукой папка/имя_файла
Как выглядит непосредственно масив с моком:
[
{
},
{
}
]
Он содержит в себе два объекта:
- Первый объект отвечает за пред-условия и/или техническую часть ответа (хедеры, статус ответа и пр.)
- Второй объект это body для ответа, чаще всего в формате json, именно его будет отдавать мок.
Рассмотрим первый объект по подробнее: С помощью него есть возможность добавить дополнительные условия для матчинга мока (при каких условиях мок должен вернуть этот ответ) для этих целей создается массив с именем "requestConditions"
requestConditions
Это массив с predicates, матчеры полностью совпадают с описанными mbtest.org http://www.mbtest.org/docs/api/predicates необходимо в одном объекте использовать один предиктат, количество таких предиктатов не ограниченно
пример: мок будет искать совпадение cookie covid=true и совпадение в запросе {"products":{"id": 17876325,"quantity": 1}}
"requestConditions": [
{
"contains": {
"headers": {
"Cookie": "covid=true"
}
}
},
{
"deepEquals": {
"body": [
{
"id": 17876325,
"quantity": 1
}
]
},
"jsonpath": {
"selector": "$.products"
}
}
]
responseConditions
Добавляет в ответ необходимые вам куки, хедеры и прочее, работает так же как requestConditions Описывается по http://www.mbtest.org/docs/api/stubs
Пример: Добавляются хедеры и меняют статус ответа.
"responseConditions": {
"is": {
"headers": {
"Content-Type": "text/html; charset=UTF-8",
"location": "/oauth-server/oauth/authorize"
},
"statusCode": 303
}
}
Так же есть мощный инструмент в виде Behaviors, добавляется в responseCondition
Вся информация http://www.mbtest.org/docs/api/behaviors
Пример (полноценный мок): Копирует из хедера Referer по регекспу и вставляет в переменную ${host} которую можно использовать в ответе
[
[
{
"responseConditions": {
"_behaviors": {
"copy": [
{
"from": {
"headers": "Referer"
},
"into": **"${host}",**
"using": {
"method": "regex",
"selector": "^(?:https?:\/\/)?(?:[^@]+@)?(?:www)?([^\/?]+)"
}
}
]
}
}
},
{
"link": "**${host}**/success-new/0013158450/",
"errors": [],
"warnings": []
}
]
]
5 years ago