어려운 RESTDocs.... 깐깐한 자식이구만.
간단한 아이디 중복체크 로직을 테스트 중이었는데, 단순하게 문자열을 받아서 해당 문자열의 중복체크만 하면 되는 거였다.
그런데 만난 500 에러.
Controller 에서
@GetMapping(value = "/duplication-check/{value}", name = "아이디 중복검사")
로 매핑 URL 값을 정해주고 메서드에서는
@PathVariable @NotBlank String loginId
로 받고 있었는데 이 부분을 value로 URL 값에 PathVariable과 맞춰 주니 테스트를 통과했다.
Controller.java
@GetMapping(value = "/duplication-check/{value}", name = "아이디 중복검사") public BaseResponse<Boolean> dupCheck(@PathVariable @NotBlank String loginId) { return BaseResponse.ofSuccess(loginApplicationService.checkIdExists(loginId)); }
ControllerTest.java
@Test @WithMockUser void 아이디_중복체크() throws Exception { // given given(loginApplicationService.checkIdExists(anyString())).willReturn(anyBoolean()); // when + then mockMvc.perform( get( "/admin/duplication-check/{value}", "세리" ) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) ) .andExpect(status().isOk()) .andExpect(jsonPath("code").value(200)) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andDo(document("admin/duplication-check", getDocumentRequest(), getDocumentResponse(), pathParameters( parameterWithName("value").description("로그인 아이디") ), responseFields( fieldWithPath("code").type(JsonFieldType.NUMBER).description("결과 코드"), fieldWithPath("message").type(JsonFieldType.STRING).description("결과 메시지"), fieldWithPath("data").type(JsonFieldType.BOOLEAN).description("결과 데이터") ) )); verify(loginApplicationService).checkIdExists(anyString()); }
빨간색 네모 값 통일 시켜주기!