MockResponsePlugin

Имитирует ответы.

Снимок экрана: командная строка с прокси-сервером разработки, имитирующим ответ на запрос к API GitHub.

Определение экземпляра подключаемого модуля

{
  "name": "MockResponsePlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
  "configSection": "mocksPlugin"
}

Пример конфигурации

{
  "mocksPlugin": {
    "mocksFile": "mocks.json"
  }
}

Свойства конфигурации

Свойство Описание По умолчанию
mocksFile Путь к файлу с макетами ответов mocks.json
blockUnmockedRequests Ответ 502 Bad Gateway на запросы, которые не макетированы false

Параметры командной строки

Имя Описание По умолчанию
-n, --no-mocks Отключение загрузки макетных запросов false
--mocks-file Путь к файлу с макетами ответов -

Примеры файлов макетов

Ниже приведены примеры макетных объектов.

Ответ с текстом

Ответ на запрос с ответом 200 OK и текстом JSON.

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/me",
    "method": "GET"
  },
  "response": {
    "body": {
      "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
      "businessPhones": ["+1 412 555 0109"],
      "displayName": "Megan Bowen",
      "givenName": "Megan",
      "jobTitle": "Auditor",
      "mail": "MeganB@M365x214355.onmicrosoft.com",
      "mobilePhone": null,
      "officeLocation": "12/1110",
      "preferredLanguage": "en-US",
      "surname": "Bowen",
      "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
      "id": "48d31887-5fad-4d73-a9f5-3c356e68a038"
    },
    "headers": [
      {
        "name": "content-type",
        "value": "application/json; odata.metadata=minimal"
      }
    ]
  }
}

Ответ с ошибкой

Ответ на запрос с ответом 404 Not Found.

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/me/photo",
    "method": "GET"
  },
  "response": {
    "statusCode": 404
  }
}

Ответ с двоичными данными

Ответ на запрос с двоичным образом, загруженным из файла на диск.

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/users/*/photo/$value",
    "method": "GET"
  },
  "response": {
    "body": "@picture.jpg",
    "headers": [
      {
        "name": "content-type",
        "value": "image/jpeg"
      }
    ]
  }
}

Ответ по запросу nth

Отвечать на запрос только после второго вызова.

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/external/connections/*/operations/*",
    "method": "GET",
    "nth": 2
  },
  "response": {
    "statusCode": 200,
    "body": {
      "id": "1.neu.0278337E599FC8DBF5607ED12CF463E4.6410CCF8F6DB8758539FB58EB56BF8DC",
      "status": "completed",
      "error": null
    }
  }
}

Ответ в соответствии с текстом запроса

Ответ на запрос, содержащий определенную строку в тексте.

{
  "request": {
    "url": "https://login.microsoftonline.com/fa15d692-e9c7-4460-a743-29f29522229/oauth2/v2.0/token",
    "method": "POST",
    "bodyFragment": "scope=https%3A%2F%2Fapi.contoso.com%2FDocuments.Read"
  },
  "response": {
    "headers": [
      {
        "name": "Content-Type",
        "value": "application/json; charset=utf-8"
      }
    ],
    "body": {
      "token_type": "Bearer",
      "expires_in": 3599,
      "ext_expires_in": 3599,
      "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU..."
    }
  }
}

Свойства файла макетов

Свойство Описание Обязательно
request Объект запроса , определяющий запрос для ответа да
response Объект response , определяющий возвращаемый ответ да

Объект запроса

Каждый запрос имеет следующие свойства:

Свойство Описание Обязательно Значение по умолчанию Образец значения
url Абсолютный URL-адрес конечной точки API для ответа да https://jsonplaceholder.typicode.com/posts
method HTTP-команда, используемая для сопоставления запроса с url нет GET GET
nth Определяет, что прокси-сервер должен отвечать только после перехвата запроса в n-й раз нет 2
bodyFragment Строка, которая должна присутствовать в тексте запроса нет foo

Комментарии

Используйте звездочку (*) в свойстве , url если вы хотите сопоставить любую последовательность символов в URL-адресе. Например, https://jsonplaceholder.typicode.com/* соответствует https://jsonplaceholder.typicode.com/posts и https://jsonplaceholder.typicode.com/comments. Во время выполнения сервер Dev Proxy преобразует каждый из них * в регулярное выражение .*.

При определении макетов сначала поместите наиболее конкретные макеты. Например, если у вас есть два макета, один для https://jsonplaceholder.typicode.com/posts и один для https://jsonplaceholder.typicode.com/*, поместите первый макет первым. В противном случае сервер Dev Proxy сначала соответствует второму макету и возвращает ответ для https://jsonplaceholder.typicode.com/* всех запросов.

Используйте свойство , nth если необходимо отправить другой URL-адрес запроса. Например, используйте его для имитации длительной операции. При первом вызове API возвращается ответ с сообщением inprogress . При втором вызове API возвращается ответ с сообщением completed . Дополнительные сведения о свойстве см. в nth разделе Mock nth request.

bodyFragment С помощью свойства можно сопоставлять запросы на основе содержимого текста. Например, если требуется сопоставить запросы, содержащие foo строку в тексте, присвойте свойству bodyFragment значение foo. Прокси-сервер разработки использует bodyFragment только для запросов, отличных от GET.

Объект ответа

Каждый ответ имеет следующие свойства:

Свойство Описание Обязательно Значение по умолчанию Образец значения
body Текст для отправки в качестве ответа на запрос нет empty { "foo": "bar" }
statusCode Код состояния HTTP ответа нет 200 404
headers Массив заголовков для включения в ответ нет empty [{ name: "content-type", "value": "application/json" }]

Комментарии

Если вы хотите вернуть двоичные данные, присвойте body свойству строковое значение, начинающееся с @ , а затем путь к файлу относительно файла макетов. Например, возвращает изображение, @picture.jpg хранящееся в picture.jpg файле в том же каталоге, что и файл макетов.