创建测试用Apollo Server失败,报Type Query需定义至少一个字段错误
你遇到的Type Query must define one or more fields报错是TypeGraphQL构建Schema时的规范校验不通过导致的:GraphQL要求根Query类型必须至少包含1个字段,但当前传入的所有Resolver中没有扫描到任何被@Query装饰器修饰的方法,因此抛出错误。你可以按照以下顺序排查修复:
- 检查测试环境的装饰器配置
TypeGraphQL依赖TypeScript装饰器的元数据识别Resolver和接口定义,正式环境运行正常但测试报错,大概率是测试环境的ts配置没有开启装饰器相关配置。确认测试环境加载的tsconfig.json包含以下配置:
如果你使用jest作为测试框架,还要确认{ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true } }ts-jest的配置没有覆盖上述选项,关闭了元数据生成。 - 确认UserResolver导入正确
测试环境的运行工作目录和正式环境可能存在差异,你可以在buildSchema执行前打印UserResolver,确认输出的是正确的Resolver类,而不是空对象或者undefined。如果导入错误,调整导入的相对路径即可。 - 补全Query字段定义
如果正式环境构建Schema时传入了多个Resolver,其他Resolver包含@Query修饰的方法,而测试时仅传入了只有Mutation的UserResolver,就会触发这个错误。可以选择两种修复方案:- 把正式环境用到的所有Resolver都传入测试环境的
buildSchema的resolvers数组中 - 在
UserResolver中新增一个简单的Query占位即可,示例:
@Query(() => Boolean) testPlaceholder() { return true } - 把正式环境用到的所有Resolver都传入测试环境的
- 修复代码语法问题
你贴出的代码中ApolloServer实例化的配置对象缺少闭合的},如果实际代码也存在该问题,先补全语法错误。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

