モチベーション
Sprig GraphQL はサーバに対して、ドキュメントを実行するテストを書ける。
公式ドキュメントのコード例。
WebTestClient client = WebTestClient.bindToServer() .baseUrl("http://localhost:8080/graphql") .build(); HttpGraphQlTester tester = HttpGraphQlTester.create(client);
しかし、テストのためにサーバを立てるのめんどくさい。 例えば、CI 内でテストをするために、PR ごとにサーバを立てるというのはやりたくない。 できれば、簡単にライフサイクルを管理できるコンテナでやってほしい。
それをやってくれる OSS として Testcontaines というのがある。
実装
以下のように実装したらできた。
@SpringBootTest() @AutoConfigureGraphQlTester @Testcontainers public class GraphqlNativeHintsTest { private HttpGraphQlTester graphQlTester; @Container private final GenericContainer<?> container = new GenericContainer<>( DockerImageName.parse( "sample-image-name:latest")) .withExposedPorts(8080); @BeforeEach void setup() { // endpoint などは各自の設定による String address = container.getHost() + ":" + container.getMappedPort(8080); String endpoint = "/graphql"; WebTestClient client = WebTestClient.bindToServer().baseUrl(address + endpoint).build(); this.graphQlTester = HttpGraphQlTester.create(client); } @Test // テストの中身は適当 void introspectionQueryTest() { this.graphQlTester.documentName("sampleQuery").executeAndVerify(); } }