从10月8日至10日加入我们,在纽约市了解关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入纽约市GraphQL峰会2024
文档
免费开始
您正在查看此软件以前版本的文档。 切换到最新稳定版本。

模拟GraphQL响应(实验性)


QueueTestNetworkTransport是一个高级测试API,允许您指定由您的客户端实例返回的ApolloClient响应。

另请参阅MockServer,该程序创建了一个完整的HTTP服务器并帮助测试特定的服务器行为,如错误情况、HTTP标头和超时。

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

build.gradle[.kts]
dependencies {
testImplementation("com.apollographql.apollo3:apollo-testing-support:3.8.5")
}
// Also add jcenter() to your repositories
// See https://github.com/Kotlin/kotlinx-nodejs/issues/16
repositories {
mavenCentral()
jcenter()
}

通过将其传递给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。

隐私政策

公司