Я пытаюсь написать интеграционные тесты для своего кода GraphQL с помощью Spring Boot, и у меня возникают проблемы.
Во-первых, это библиотека, которую я использую для интеграции GraphQL Spring Boot:
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter-test</artifactId>
<version>7.0.1</version>
<scope>test</scope>
</dependency>
Все мои резолверы собраны идеально, я без проблем могу позвонить им из почтальона. Проблема возникает в моем тестовом коде. Я хочу провести интеграционные тесты, сквозные. Для моего первого теста вот мой файл запроса GraphQL:
query {
clients {
id
name
clientKey
enabled
allowAuthCode
allowClientCredentials
allowPassword
}
}
Это совершенно правильный запрос для моего GraphQL API, я могу успешно запустить его из Postman. Вот мой тестовый код:
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ClientQueryIntegrationTest {
@Autowired
private lateinit var graphqlRestTemplate: GraphQLTestTemplate
@Test
fun test() {
graphqlRestTemplate.addHeader("Authorization", "Bearer $token")
val response = graphqlRestTemplate.postForResource("graphql/getAllClients.graphql")
}
}
Когда я запускаю это, я получаю ошибку десериализации Джексона с моим начальным запросом GraphQL. Я знаю, что мой запрос GraphQL загружается правильно из-за информации в сообщении об ошибке, я просто не знаю, почему Джексон неправильно десериализирует это во время моих тестов.
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `graphql.kickstart.execution.GraphQLRequest` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{"query":"query {\n clients {\n id\n name\n clientKey\n enabled\n allowAuthCode\n allowClientCredentials\n allowPassword\n }\n}\n","variables":null}')
at [Source: (String)""{\"query\":\"query {\\n clients {\\n id\\n name\\n clientKey\\n enabled\\n allowAuthCode\\n allowClientCredentials\\n allowPassword\\n }\\n}\\n\",\"variables\":null}""; line: 1, column: 1]
Что я могу попробовать дальше ?