模拟响应
若要定义模拟响应,请在当前工作目录中创建名为 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。
示例
另请参阅相关的开发代理示例: