Мы тестируем наш GraphQL Backend с помощью WebTestClient (SpringBoot) и не можем понять, почему именно тест не прошел. Наш код выглядит так:
webTestClient
.post().uri(GQLKonstanten.URL)
.body(GQLRequestInserter.from(movieDeleteGQL, variables))
.exchange()
.expectBody()
.jsonPath("$.errors").doesNotExist()
.jsonPath("$.data.movie.id")
.isEqualTo(movie.getId());
Я получаю трассировку стека со следующим сообщением:
java.lang.AssertionError: нет значения в пути JSON "$ .data.movie.id"
...
Вызвано: com.jayway.jsonpath.PathNotFoundException: Отсутствует свойство в пути $ ['data'] ['movie']
Сообщение об ошибке полностью правильное. Но чтобы на самом деле УВИДЕТЬ, что на самом деле вернула эта команда graphQl Exceution, я всегда меняю выполнение WebClient на:
String responseBody = webTestClient
.post().uri(GQLKonstanten.URL)
.body(GQLRequestInserter.from(deleteMovieGQL, variables))
.exchange()
.expectStatus()
.isOk()
.expectBody(String.class)
.returnResult().getResponseBody();
System.out.print(responseBody);
Тогда я вижу результат как
{"data":{"deleteMovie":{"id":7}}}
и я вижу, что ожидал "movie" вместо свойства "deleteMovie". поэтому я меняю свой тест на
.jsonPath("$.data.deleteMovie.id")
Всегда запускать тест дважды и менять код обременительно.
Есть ли лучший способ позволить WebTestClient всегда выводить responseBody, когда тест не проходит?
.log()
? - person Toerktumlare   schedule 17.01.2020