Как получить тело в виде String из ServerResponse для тестирования? - PullRequest
0 голосов
/ 18 марта 2020

Скажем, у нас есть экземпляр o.s.w.reactive.function.server.ServerResponse.

Как правильно извлечь содержимое его тела, другими словами, как реализовать функцию fetchBodyAsString?

test(){
  ServerResponse response = getResponseFromService("mock data");

  String body = fetchBodyAsString(response);

  assertEquals("hello", body);
}

Не могли бы вы также немного рассказать, почему у ServerResponse есть методы для всего (cookies(), headers(), statusCode()), кроме тела ответа? Я предполагаю, что должен быть способ получить тело с помощью метода writeTo(), хотя совершенно неясно, как его использовать.

1 Ответ

0 голосов
/ 22 марта 2020

Насколько я знаю ServerResponse используется в функции контроллера или маршрутизатора. Для тестирования вы можете использовать WebTestClient

@Autowired
WebTestClient webTestClient;


@Test
void test() {

    webTestClient.get()
            .exchange()
            .expectStatus()
            .isOk()
            .expectHeader()
            .contentType(MediaType.APPLICATION_JSON)
            .expectBody()
            .jsonPath("data.name").isEqualTo("name");


}

или

@Autowired
WebTestClient webTestClient;


@Test
void test() {

    FluxExchangeResult<String> result = webTestClient.get()
            .exchange()
            .returnResult(String.class);

    int rawStatusCode = result.getRawStatusCode();
    HttpStatus status = result.getStatus();
    HttpHeaders responseHeaders = result.getResponseHeaders();
    String stringResponseBody = result.getResponseBody().blockFirst();

}
...