如何在单元测试中针对模拟数据执行GQL查询以获取真实结果?
针对模拟数据执行GQL查询的工具及模式分析
可用工具推荐
- graphql 核心库直接实现:借助
graphql包的execute函数,配合自定义Schema和模拟数据源就能实现需求。示例代码:import { graphql, buildSchema } from 'graphql'; // 定义匹配数据结构的GraphQL Schema const userSchema = buildSchema(` type User { id: ID! name: String! } type Query { user: User } `); // 完整的模拟数据 const fakeUserData = { id: 1, name: "First Last" }; // 根解析器,返回模拟数据源 const resolvers = { user: () => fakeUserData, }; // 执行目标查询 const targetQuery = `query { user { id } }`; graphql({ schema: userSchema, source: targetQuery, rootValue: resolvers }) .then(res => console.log(res.data)); // 输出 { user: { id: 1 } } - @graphql-tools/mock:这个封装好的工具可以快速生成符合Schema的模拟数据,并且会自动根据查询语句过滤返回字段,无需手动编写解析器逻辑,适合大规模模拟场景。
模式合理性判断
这个模式非常合理,核心优势包括:
- 还原真实请求逻辑:返回的结构和真实GQL查询完全一致,避免冗余字段干扰测试结果,能更准确验证业务逻辑对所需字段的处理。
- 降低维护成本:只需维护一份完整的模拟数据源,所有查询会自动提取对应字段,无需为每个查询单独编写mock响应。
- TypeScript友好:配合Schema的类型定义,能保证模拟数据和查询结果的类型匹配,减少类型错误。
内容的提问来源于stack exchange,提问作者Gabriel Faria
相关产品推荐
相关产品推荐

