12.3.2 Kiểm thử các yêu cầu POST
WebTestClient có thể làm nhiều việc hơn là chỉ kiểm thử các yêu cầu GET đối với controller. Nó cũng có thể được sử dụng để kiểm thử bất kỳ loại phương thức HTTP nào. Bảng 12.1 ánh xạ các phương thức HTTP với các phương thức của WebTestClient.
Bảng 12.1 WebTestClient kiểm thử bất kỳ loại yêu cầu nào đối với các controller Spring WebFlux.
| HTTP method | WebTestClient method |
|---|---|
GET | .get\(\) |
POST | .post\(\) |
PUT | .put\(\) |
PATCH | .patch\(\) |
DELETE | .delete\(\) |
HEAD | .head\(\) |
Lấy ví dụ về việc kiểm thử một yêu cầu sử dụng phương thức HTTP khác đối với một controller Spring WebFlux, hãy cùng xem xét một bài kiểm thử khác với TacoController. Lần này, bạn sẽ viết một bài kiểm thử cho endpoint tạo taco trong API của bạn bằng cách gửi một yêu cầu POST đến /api/tacos như sau:
@SuppressWarnings("unchecked")
@Test
public void shouldSaveATaco() {
TacoRepository tacoRepo = Mockito.mock(
TacoRepository.class);
WebTestClient testClient = WebTestClient.bindToController(
new TacoController(tacoRepo)).build();
Mono<Taco> unsavedTacoMono = Mono.just(testTaco(1L));
Taco savedTaco = testTaco(1L);
Flux<Taco> savedTacoMono = Flux.just(savedTaco);
when(tacoRepo.saveAll(any(Mono.class))).thenReturn(savedTacoMono);
testClient.post()
.uri("/api/tacos")
.contentType(MediaType.APPLICATION_JSON)
.body(unsavedTacoMono, Taco.class)
.exchange()
.expectStatus().isCreated()
.expectBody(Taco.class)
.isEqualTo(savedTaco);
}Cũng giống như phương thức kiểm thử trước, shouldSaveATaco() bắt đầu bằng việc mock TacoRepository, xây dựng một WebTestClient được liên kết với controller, và thiết lập một số dữ liệu kiểm thử. Sau đó, nó sử dụng WebTestClient để gửi một yêu cầu POST đến /api/tacos, với phần thân là kiểu application/json và payload là dạng JSON được tuần tự hóa từ đối tượng Taco nằm trong Mono chưa được lưu. Sau khi thực hiện exchange(), bài kiểm thử xác nhận rằng phản hồi có mã trạng thái HTTP 201 (CREATED) và payload trong phần thân phản hồi bằng với đối tượng Taco đã được lưu.
