Spring WebClient и jsonPath - как вывести результат json в случае сбоя теста

Мы тестируем наш 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, когда тест не проходит?


person Janning    schedule 17.01.2020    source источник
comment
вы пробовали просто использовать функцию .log()?   -  person Toerktumlare    schedule 17.01.2020
comment
Я не знаю, какую функцию журнала вы имеете в виду. Я нашел лучший способ с .consumeWith (System.out :: println) после expectBody ()   -  person Janning    schedule 22.01.2020


Ответы (1)


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

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

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

person Janning    schedule 22.01.2020