El controlador REST de JUnit arroja una URL de inicio de sesión en lugar del modelo y la vista reales.
Estoy tratando de probar mi controlador rest de spring-boot, en lugar de obtener el resultado real me muestra la página de inicio de sesión. Me devuelve un estado 302, he proporcionado el código del controlador, el caso de prueba y el error proporcionado por el junit. Por favor, echa un vistazo a todo el código y déjame saber si necesitas alguna otra información.
Controlador:
@GetMapping("/{userId}/edit/{todoId}")
public ModelAndView updateTodo(@PathVariable Long userId, @PathVariable Long todoId) {
User user = userService.findById(userId);
ModelAndView model = new ModelAndView("todo-form.jsp");
model.addObject("userId", userId);
return model;
}
Prueba Junit:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
class UserApiControllerTest {
@DisplayName("Test updateTodo Api")
@Test
public void updateTodo() throws Exception {
mockMvc.perform(get("/1/edit/2"))
.andExpect(status().isOk());
}
}
ERROR:
MockHttpServletRequest:
HTTP Method = GET
Request URI = /1/edit/2
Parameters = {}
Headers = []
Body = null
Session Attrs = {SPRING_SECURITY_SAVED_REQUEST=DefaultSavedRequest[http://localhost/1/edit/2]}
Handler:
Type = null
Async:
Async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 302
Error message = null
Expires:"0", Location:"http://localhost/login"]
Content type = null
Body =
Forwarded URL = null
Redirected URL = http://localhost/login
davy.ai
El error indica que la prueba no pasa porque la respuesta de la solicitud simulada es una redirección (código de estado 302) a la página de inicio de sesión (http://localhost/login), en lugar de retornar el resultado esperado.
Parece que el método que se está probando requiere autenticación, la cual no se está proporcionando en la prueba. Puedes deshabilitar la seguridad para propósitos de prueba o agregar autenticación en la prueba.
Para deshabilitar la seguridad, puedes agregar la siguiente anotación a tu clase de prueba:
Esto excluirá la configuración de seguridad predeterminada de Spring Boot para la prueba.
Alternativamente, puedes agregar encabezados de autenticación a la solicitud para proporcionar una identidad válida de usuario. Por ejemplo:
Donde
token
es un token de autenticación válido para el usuario que realiza la solicitud.Asegúrate de tener la configuración necesaria en tu archivo de configuración de seguridad para permitir el acceso al punto final que está siendo probado por el usuario con las credenciales de autenticación proporcionadas.