Spring WebClient и jsonPath - Как вывести json результат, если тест не пройден - PullRequest
0 голосов
/ 17 января 2020

Мы тестируем наш 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 при сбое теста?

1 Ответ

0 голосов
/ 22 января 2020

Лучший способ, который я нашел, - это добавить

.expectBody()
.consumeWith(System.out::println)

. Он всегда печатает результат json, а не только при ошибке. Но это работает для меня.

...