模拟响应

若要定义模拟响应,请在当前工作目录中创建名为 mocks.json 的文件。 此文件允许你为使用的每个项目定义一组特定的模拟。 文件包含一个 对象,其 mocks 数组包含 mock 对象。

提示

可以使用 MockGeneratorPlugin 根据截获的请求生成 mocks 文件,而不是手动创建 mocks 文件。

以下配置演示了两个模拟响应,用于检索有关当前用户的信息。 请求有关当前用户的信息时,代理将使用模拟响应进行响应。 请求有关用户照片的信息时,代理将返回 404 状态代码。

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/mockresponseplugin.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"
          }
        ]
      }
    },
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 404
      }
    }
  ]
}

顺序优先级

模拟按在文件中定义 mocks.json 它们的顺序进行匹配。 如果使用相同的 URL 和方法定义多个响应,则使用第一个匹配的响应。

使用以下配置时,代理会使用 500 Internal Server Error响应对 https://graph.microsoft.com/v1.0/me/photo 的所有GET请求。

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

通配符支持

代理支持在 URL 属性中使用通配符。 可以使用星号字符 (*) 来匹配 URL 中的任何字符系列。

使用以下配置时,代理会响应所有请求,以使用相同的响应获取任何用户的配置文件。

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/users/*"
  },
  "response": {
    "body": {
      "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
      "businessPhones": ["+1 425 555 0109"],
      "displayName": "Adele Vance",
      "givenName": "Adele",
      "jobTitle": "Product Marketing Manager",
      "mail": "AdeleV@M365x214355.onmicrosoft.com",
      "mobilePhone": null,
      "officeLocation": "18/2111",
      "preferredLanguage": "en-US",
      "surname": "Vance",
      "userPrincipalName": "AdeleV@M365x214355.onmicrosoft.com",
      "id": "87d349ed-44d7-43e1-9a83-5f2406dee5bd"
    }
  }
}

使用以下配置时,当你请求获取任何用户照片的二进制文件时,代理将从磁盘返回相同的映像。

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

使用以下配置时,当你请求获取具有任何查询字符串参数的当前用户配置文件时,代理将返回相同的响应。

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/me?*"
  },
  "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"
    }
  }
},

使用文件的内容进行响应

若要保持 mocks 文件整洁有序,可以将响应的内容存储在单独的文件中,并在 mocks 文件中引用它。 若要指示 Dev Proxy 从文件加载模拟响应正文,请将 属性设置为 body@ ,后跟相对于 mocks 文件的文件路径。

例如,以下模拟响应配置指示开发人员代理使用与 mocks 文件位于同一文件夹中的文件内容response.json响应 对 https://graph.microsoft.com/v1.0/me 的任何请求。

{
  "request": {
    "url": "https://graph.microsoft.com/v1.0/me",
    "method": "GET"
  },
  "response": {
    "body": "@response.json",
    "headers": [
      {
        "name": "content-type",
        "value": "application/json; odata.metadata=minimal"
      }
    ]
  }
}

@使用 -token 适用于文本和二进制文件

Microsoft Graph Batch 支持

开发代理支持模拟以批量请求发送到 Microsoft Graph 的响应。

在模拟文件中包括对批处理请求的响应没有特殊要求,但如果请求与模拟响应不匹配, 502 Bad Gateway 则会返回响应。

未停靠的请求支持

开发代理支持在代理截获未停靠的请求时引发错误。 使未模拟请求失败的功能对于识别在 mocks 文件中错过的请求非常有用。

若要启用此功能,请在 devproxyrc 文件中添加 MockResponsePlugin 配置部分并启用blockUnmockedRequests设置。

{
  "mocksPlugin": {
    "mocksFile": "mocks.json",
    "blockUnmockedRequests": true
  }
}

截获未停靠的请求时, 502 Bad Gateway 将返回响应。

后续步骤

详细了解 MockResponsePlugin。

示例

另请参阅相关的开发代理示例: