You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建测试用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包含以下配置:
    {
      "compilerOptions": {
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true
      }
    }
    
    如果你使用jest作为测试框架,还要确认ts-jest的配置没有覆盖上述选项,关闭了元数据生成。
  • 确认UserResolver导入正确
    测试环境的运行工作目录和正式环境可能存在差异,你可以在buildSchema执行前打印UserResolver,确认输出的是正确的Resolver类,而不是空对象或者undefined。如果导入错误,调整导入的相对路径即可。
  • 补全Query字段定义
    如果正式环境构建Schema时传入了多个Resolver,其他Resolver包含@Query修饰的方法,而测试时仅传入了只有Mutation的UserResolver,就会触发这个错误。可以选择两种修复方案:
    1. 把正式环境用到的所有Resolver都传入测试环境的buildSchema的resolvers数组中
    2. 在UserResolver中新增一个简单的Query占位即可,示例:
    @Query(() => Boolean)
    testPlaceholder() {
      return true
    }
    
  • 修复代码语法问题
    你贴出的代码中ApolloServer实例化的配置对象缺少闭合的},如果实际代码也存在该问题,先补全语法错误。

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:54:03