MockResponsePlugin

模拟响应。

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

插件实例定义

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

配置示例

{
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  }
}

配置属性

资产 DESCRIPTION 违约
mocksFile 包含模拟响应的文件的路径 mocks.json
blockUnmockedRequests 返回 502 Bad Gateway 未模拟的请求的响应 false

命令行选项

名称 DESCRIPTION 违约
-n, --no-mocks 禁用加载模拟请求 false
--mocks-file 包含模拟响应的文件的路径 -

模拟文件示例

下面是模拟对象的示例。

使用正文进行响应

使用 200 正常响应和 JSON 正文响应请求的响应。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "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 未找到的响应响应响应请求。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 404
      }
    }
  ]
}

使用二进制数据进行响应

使用从磁盘上的文件加载的二进制映像响应请求。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "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 请求做出响应

仅在第二次调用请求后响应请求。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "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
        }
      }
    }
  ]
}

响应与请求正文匹配

响应正文中包含特定字符串的请求。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.27.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "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..."
        }
      }
    }
  ]
}

模拟文件属性

资产 DESCRIPTION 必选
request 定义 要响应的请求的请求对象 是的
response 定义要返回的响应的响应对象 是的

请求对象

每个请求具有以下属性:

资产 DESCRIPTION 必选 默认值 示例值
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/*第一个模拟放在第一个模拟。 否则,开发代理首先匹配第二个模拟,并返回所有请求的 https://jsonplaceholder.typicode.com/* 响应。

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

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

响应对象

每个响应具有以下属性:

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

注解

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

后续步骤