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

模拟 GraphQL 响应


测试网络传输目前在 Apollo Kotlin 中使用 实验性如果您对它们有反馈,请通过GitHub 问题Kotlin Slack 社区提出。

QueueTestNetworkTransport是一个高级测试 API,可用于指定您的 响应,这些响应由您的 ApolloClient 实例返回。

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

build.gradle[.kts]
dependencies {
testImplementation("com.apollographql.apollo:apollo-testing-support:4.0.0")
}

通过将其传递到 ApolloClient 构建器来启用 QueueTestNetworkTransport

val apolloClient = ApolloClient.Builder()
.networkTransport(QueueTestNetworkTransport())
.build()

然后,您可以使用 enqueueTestResponse 扩展函数来指定要返回的 GraphQL 响应:

val testQuery = GetHeroQuery("001")
val testData = GetHeroQuery.Data {
hero = droidHero {
name = "R2D2"
}
}
apolloClient.enqueueTestResponse(testQuery, testData)
val actual = apolloClient.query(testQuery).execute().data!!
assertEquals(testData.hero.name, actual.hero.name)

您可以将一个ApolloResponse对象传递给enqueueTestResponse函数,或者作为快捷方式,您可以直接像上面那样传递一个Data对象。如果传递了Data对象,您还需要传递一个,因为底层数据结构需要在里面建立一个ApolloResponse的引用。

为了帮助创建模拟的响应数据,您可以使用数据构建器

高级使用

QueueTestNetworkTransport按照它们被入队时的顺序返回响应。

在某些测试中,将响应映射到可能更方便。

为了实现这一点,请使用MapTestNetworkTransport,并调用registerTestResponse扩展函数:

val apolloClient = ApolloClient.Builder().networkTransport(MapTestNetworkTransport()).build()
apolloClient.registerTestResponse(query1, testData1)
apolloClient.registerTestResponse(query2, testData2)
val actual1 = apolloClient.query(query1).execute().data
val actual2 = apolloClient.query(query2).execute().data
// Execute query1 again, which is mapped to testData1
val actual3 = apolloClient.query(query1).execute().data
assertEquals(testData1, actual1)
assertEquals(testData2, actual2)
assertEquals(testData1, actual3)

如果需要对返回的响应有更多控制,您可以实现自己的NetworkTransport并将其传递给ApolloClient构建器:

private class CustomTestNetworkTransport : NetworkTransport {
override fun <D : Operation.Data> execute(request: ApolloRequest<D>): Flow<ApolloResponse<D>> {
return flowOf(
ApolloResponse.Builder(
/* Your custom logic here */
).build() as ApolloResponse<D>
)
}
override fun dispose() {}
}
apolloClient = ApolloClient.Builder()
.networkTransport(CustomTestNetworkTransport())
.build()

请注意,如果您使用自定义的NetworkTransport,则无法调用enqueueTestResponse()registerTestResponse(),因为它们期望传输是QueueTestNetworkTransportMapTestNetworkTransport

上一页
模拟HTTP响应当前内容
下一页
数据构建器
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商业名称Apollo GraphQL。

隐私政策

公司