es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , ,

Answer

  1. Avatar for 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:

    @TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})
    

    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:

    mockMvc.perform(get("/1/edit/2")
            .header("Authorization", "Bearer " + token)
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk());
    

    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.

Comments are closed.