0.0.1 • Published 5 years ago

stub-maker v0.0.1

Weekly downloads
-
License
ISC
Repository
gitlab
Last release
5 years ago

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 создает на его основе мок

Как выглядит файл

Файл представляет из себя массив с массивами в котором содержатся объекты с данными.

[
    [
        {

        },
        {

        }
    ]
]

Каждый массив является отдельным моком, при этом если он лежит в папке то ко всем из них будут доавлены условия с кукой папка/имя_файла

Как выглядит непосредственно масив с моком:

[
    {

    },
    {

    }
]

Он содержит в себе два объекта:

  1. Первый объект отвечает за пред-условия и/или техническую часть ответа (хедеры, статус ответа и пр.)
  2. Второй объект это 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": []
        }
    ]
]
0.0.1

5 years ago