MockResponsePlugin

模拟响应。

命令提示符的屏幕截图,其中包含开发代理模拟 GitHub API 请求的响应。

插件实例定义

{
  "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 未找到”响应响应响应请求。

{
  "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 定义要返回的响应的响应对象

请求对象

每个请求具有以下属性:

属性 说明 必须 默认值 示例值
url 要响应的 API 终结点的绝对 URL 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/postshttps://jsonplaceholder.typicode.com/comments。 在运行时,开发代理将每个 * 转换为正则表达式 .*

定义模拟时,首先放置最具体的模拟。 例如,如果有两个模拟,一个用于 https://jsonplaceholder.typicode.com/posts ,一个用于 https://jsonplaceholder.typicode.com/*,将第一个模拟放在第一个模拟前。 否则,Dev Proxy 首先匹配第二个模拟,并返回所有请求的 https://jsonplaceholder.typicode.com/* 响应。

nth如果需要向同一请求 URL 发送不同的 ,请使用 属性。 例如,使用它来模拟长时间运行的操作。 首次调用 API 时,它会返回包含消息的 inprogress 响应。 第二次调用 API 时,它会返回包含消息的 completed 响应。 有关 属性的详细信息 nth ,请参阅 模拟 nth 请求

bodyFragment使用 属性,可以根据正文内容匹配请求。 例如,如果要匹配正文中包含字符串的请求 foo ,请将 bodyFragment 属性设置为 foo。 开发代理仅对 以外的GET请求使用 bodyFragment

响应对象

每个响应具有以下属性:

属性 说明 必须 默认值 示例值
body 要作为对请求的响应发送的正文 empty { "foo": "bar" }
statusCode 响应 HTTP 状态代码 200 404
headers 要包含在响应中的标头数组 empty [{ name: "content-type", "value": "application/json" }]

注解

如果要返回二进制数据,请将 body 属性设置为字符串值,该值以 @ 开头,后跟相对于 mocks 文件的文件路径。 例如, @picture.jpg 返回存储在 picture.jpg 与 mocks 文件位于同一目录中的 文件中的图像。