如何配置GraphQlTester读取main/resources/graphql-documents/目录文件
配置GraphQlTester读取自定义目录的GraphQL文件
你可以通过自定义ResourceDocumentSource Bean,并在构建GraphQlTester时指定该数据源,让它读取main/resources/graphql-documents/目录下的文件,无需复制文件到测试目录。
步骤1:定义自定义的ResourceDocumentSource
创建配置类,加载main/resources/graphql-documents/下的所有GraphQL文件:
@Configuration public class GraphQlTestConfig { @Bean public ResourceDocumentSource customGraphQlDocumentSource() { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { // 匹配graphql-documents目录下所有子目录的.graphql文件 Resource[] documents = resolver.getResources("classpath:graphql-documents/**/*.graphql"); return new ResourceDocumentSource(documents); } catch (IOException e) { throw new RuntimeException("加载GraphQL文档失败", e); } } }
步骤2:在测试类中使用自定义数据源
在测试类中注入自定义的ResourceDocumentSource,并通过GraphQlTester.Builder指定该数据源:
@SpringBootTest @Import(GraphQlTestConfig.class) class MyGraphQlApiTests { private final WebGraphQlTester graphQlTester; // 通过构造器注入Builder和自定义数据源 MyGraphQlApiTests(WebGraphQlTester.Builder testerBuilder, ResourceDocumentSource customDocumentSource) { this.graphQlTester = testerBuilder.documentSource(customDocumentSource).build(); } @Test void testMyQuery() { MyResult expectedResult = // 构造预期结果 graphQlTester.documentName(GQL_MY_QERY) // 对应graphql-documents下的GQL_MY_QERY.graphql文件 .variable(ID, "myId") .execute() .path(GQL_MY_QERY) .entity(MyResult.class) .satisfies(actualResult -> assertEquals(expectedResult, actualResult)); } }
注意事项
- 确保
documentName指定的名称与graphql-documents/目录下的文件名完全一致(不含.graphql后缀) - 如果GraphQL文件分布在子目录中,
documentName需要包含相对路径,比如"subdir/my-query"对应graphql-documents/subdir/my-query.graphql - 若使用
ExecutionGraphQlTester而非WebGraphQlTester,配置方式完全一致,只需替换Builder类型即可
内容的提问来源于stack exchange,提问作者Ebad
相关产品推荐
相关产品推荐

