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

如何使用graphqlTestTemplate为含Upload类型参数的Mutation编写集成测试

解决方案:GraphQL文件上传测试报错处理

错误原因

你直接把文件字节数组放入ObjectNode变量后,Jackson会自动将字节序列化为Base64字符串,但GraphQL的Upload类型要求传入jakarta.servlet.http.Part(或兼容的Multipart上传对象),而非字符串,因此触发类型不匹配错误。

正确实现方式

需要使用测试模板支持Multipart请求的方法处理文件上传,而非普通的perform方法。以下是修正后的代码示例:

代码示例

String query = "saveDoc.graphql";
ObjectNode variables = mapper.createObjectNode();
// 正确传入DocInput参数
variables.putPOJO("docInput", SpringJacksonResourceReader.read("test_data/documentinput.json", ObjectNode.class));

// 加载测试文件资源,构造MockMultipartFile
Resource fileResource = resourceLoader.getResource("classpath:test_data/xyz.pdf");
MockMultipartFile mockFile = new MockMultipartFile(
    "file",                  // 对应Mutation中的fileUpload参数名
    "xyz.pdf",               // 文件名
    "application/pdf",       // 文件MIME类型
    fileResource.getInputStream()
);

// 使用performMultipart方法发送Multipart形式的GraphQL请求
GraphQLResponse response = graphQLTestTemplate.performMultipart(
    query,
    variables,
    Map.of("file", mockFile) // 将文件作为Multipart参数传入
);

关键注意点

  • GraphQL文件上传依赖multipart/form-data请求格式,不能将文件数据直接嵌入JSON变量
  • 确保测试模板提供了performMultipart(或类似命名的Multipart支持方法),主流框架如Spring GraphQL的测试工具都会封装此能力
  • 保持Multipart参数名(示例中的"file")与Mutation定义的fileUpload参数名对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:16