Мы тестируем наш WebQL-бэкэнд GraphQL с помощью 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 path "$ .data.mov ie .id"
...
Причина: com.jayway.jsonpath.PathNotFoundException: отсутствует свойство в пути $ ['data'] [' mov ie ']
Сообщение об ошибке полностью верно. Но чтобы на самом деле увидеть то, что на самом деле вернула команда 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}}}
и вижу, что ожидал " mov ie "вместо свойства" deleteMov ie ". поэтому я изменяю свой тест на
.jsonPath("$.data.deleteMovie.id")
Всегда запускать тест дважды и менять код громоздко.
Есть ли лучший способ, позволяющий WebTestClient всегда выводить responseBody при сбое теста?