Mountebank - Как мне утверждать, что тело сообщения имеет формат JSON в POST-запросе в Mountebank? - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу поставить заглушку и проверить тело сообщения в POST-запросе в mountebank,

{
  "port": "22001",
  "protocol": "http",
  "name": "login_user",
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "statusCode": 201,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "equals": {
            "path": "/login_user",
            "method": "POST",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {
              "name": "Tony",
              "age": "20"
            }
          }
        }
      ]
    }
  ]
}

, если тело сообщения в формате JSON. ожидаемый статус ответа Код 200.

для примера

{ 
  "body": {
    "name": "Tony",
    "age": "20"
  }
}

, если тело сообщения в JSON формате , но JSON строка . ожидаемый статус ответа Код 400.

для примера

{ 
  "body": "{\"name\": \"Tony\", \"age\": \"20\"}"
}

1 Ответ

0 голосов
/ 07 февраля 2020

Этого можно достичь с помощью предиката «совпадения», содержащего регулярное выражение (довольно грубое в этом примере) для захвата любого ввода строки и возврата 400:

  "stubs": [
    {
      "responses": [
        {
          "is": {
            "statusCode": 400,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "matches": {
            "path": "/login_user",
            "method": "POST",
            "body": ".*\\\\\\\"name.*"
          }
        }
      ]
    },
    {
      "responses": [
        {
          "is": {
            "statusCode": 201,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "equals": {
            "path": "/login_user",
            "method": "POST",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {
              "name": "Tony",
              "age": "20"
            }
          }
        }
      ]
    }
  ]

В качестве альтернативы, вы также можете указать значение по умолчанию код ответа 400 в объявлении самозванца, так что все, что не соответствует указанному предикату c, возвратит ответ 400 по умолчанию:

{
  "port": "22001",
  "protocol": "http",
  "name": "login_user",
  "defaultResponse": {
      "statusCode": 400
  },
  "stubs": [
    {
.... snip ....
...