加入我们,于10月8日至10日在纽约市学习关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们,参加2024年纽约市的GraphQL峰会
文档
免费开始

模拟HTTP响应(实验性)


MockServer仍然是实验性的,大部分 API 都是针对 Kotlin 设计的。MockServer是跨平台的,但如果您只使用 Java,我们建议使用OkHttp MockWebServer它将提供惯用的 Java API。

MockServer实现了一个 HTTP 服务器,您可以使用它来模拟响应。这对于测试特定的服务器行为非常有用,例如错误情况、HTTP 标头和超时。使用它需要对生产代码进行最小修改,因为您只需要更改您的serverUrl

注意

.css-154yii{-webkit-text-decoration:underline;text-decoration:underline;text-decoration-style:dotted;text-decoration-thickness:1.5px;text-decoration-color:var(--chakra-colors-gray-300);text-underline-offset:0.2em;}.css-154yii:hover,.css-154yii[data-hover]{cursor:help;}.chakra-ui-dark .css-154yii:not([data-theme]),[data-theme=dark] .css-154yii:not([data-theme]),.css-154yii[data-theme=dark]{text-decoration-color:var(--chakra-colors-blue-400);}

将依赖项添加到你的 build.gradle 文件中:

build.gradle[.kts]
dependencies {
testImplementation("com.apollographql.mockserver:apollo-mockserver:0.0.1")
}

以下是如何使用的示例

// Create a mock server
val mockServer = MockServer()
// Provide its URL to your ApolloClient
val apolloClient = ApolloClient.Builder().serverUrl(mockServer.url()).store(store).build()
// Enqueue HTTP responses
mockServer.enqueueString("""{"data": {"random": 42}}""")
mockServer.enqueue(
MockResponse(
body = "Internal server error",
statusCode = 500,
headers = mapOf("X-Test" to "true"),
// Optionally pass a delay to simulate network latency
delayMillis = 1000L,
)
)
// Execute queries
val response1 = apolloClient
.query(GetRandomQuery())
.execute()
val response2 = apolloClient
.query(GetRandomQuery())
.execute()
// Don't forget to stop the server when you're done
mockServer.stop()

通常, enqueue 函数以 MockResponse 作为参数,但它也支持简写版本,接受一个 String (两者上面都有展示)。

高级用法

默认情况下, MockServer 配置了 QueueMockServerHandler,返回入队顺序的响应。如果需要更细粒度的控制返回的响应,您可以自己实现 MockServerHandler 并将其传递给 MockServer

val customHandler = object : MockServerHandler {
override fun handle(request: MockRequest): MockResponse {
return if (/* Your custom logic here */) {
MockResponse(
body = """{"data": {"random": 42}}""",
headers = mapOf("X-Test" to "true"),
)
} else {
MockResponse(
body = "Internal server error",
statusCode = 500,
)
}
}
}
val mockServer = MockServer(customHandler)

请注意,如果您使用自定义 MockServerHandler,则无法调用 MockServer.enqueue(),因为它期望处理程序为 QueueMockServerHandler

上一个
测试概览
下一个
模拟 GraphQL 响应
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,以Apollo GraphQL名义。

隐私政策

公司