InsideDarkWeb.com

Как протестировать POST контроллер через WebMVC?

Уже второй день гуглю, но все безуспешно. Помогите, пожалуйста.. Необходимо протестировать метод контроллера EmployeeController. Метод:

@PostMapping("/current/update-email")
    public ResponseEntity<String> updateEmail(@RequestBody String email) {
        if (!StringUtils.isEmpty(email)) {
            String emailVerificationPattern = "^[a-zA-Zа-яА-ЯёЁ0-9.-][email protected][a-zA-Zа-яА-ЯёЁ0-9.-]+$";
            Pattern validEmailPattern = Pattern.compile(emailVerificationPattern);
            boolean isEmailValid = validEmailPattern.matcher(email).matches();

            if (isEmailValid) {
                Employee employee = securityService.getCurrentEmployee();
                employee.setEmail(email);
                employeeService.save(employee);
                return ResponseEntity.ok("Email changed!");
            } else {
                return ResponseEntity.badRequest().body("Email value is invalid");
            }
        } else {
            return ResponseEntity.badRequest().body("Email is empty");
        }
    }

Код самого реквеста на фронте:

export const updateEmail = (history, email) =>
  fetch(`/hr-rest/employees/current/update-email`, {
    method: "POST",
    ...getCommonJsonRequestProps(),
    body: email,
  })
    .then(response => throwHttpErrors(response, history))
    .then(response => response.json())
    .then(users => users || []);

Собственно, что я имею сейчас:

@RunWith(SpringRunner.class)
@WebMvcTest(EmployeeController.class)
@ContextConfiguration(classes={MQAutoConfiguration.class, JmsAutoConfiguration.class})
public class EmployeeControllerTest {
    @Autowired
    private MockMvc mvc;
    @Autowired
    private ObjectMapper mapper;
    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before()
    public void setup()
    {
        mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void updateEmail() throws Exception
    {
        mvc.perform(MockMvcRequestBuilders
            .post("/current/update-email")
            .content(asJsonString(mapper.writeValueAsString("[email protected]")))
            .contentType(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.jsonPath("$.email").exists());
    }

    public static String asJsonString(final Object obj) {
        try {
            return new ObjectMapper().writeValueAsString(obj);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Получаю ошибку:

EmployeeControllerTest.updateEmail:72 Status expected:<200> but was:<404>

Понимаю, что скорей всего контент описан неверно, но не знаю, как описать правильно.
Буду крайне рад любой помощи, спасибо.

Stack Overflow на русском Asked by witi on November 15, 2021

1 Answers

One Answer

На сколько я понимаю контроллер не был создан при инициализации контекста.

На мой взгляд наиболее правильно будет заменить @ContextConfiguration(classes={MQAutoConfiguration.class, JmsAutoConfiguration.class}) на @Import({MQAutoConfiguration.class, JmsAutoConfiguration.class})

Похожие обсуждения в английской версии:

Answered by Alexandr on November 15, 2021

Add your own answers!

Related Questions

Синхронизация потоков, различия

1  Asked on July 30, 2020 by gwenbleidd

     

Получить данные ajax

0  Asked on July 25, 2020 by ilyaaa521

         

Вставка записанного результата в

1  Asked on July 23, 2020 by quick-brown-fox

 

Ask a Question

Get help from others!

© 2021 InsideDarkWeb.com. All rights reserved.