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.

Marco de Django Rest Framework personalizado en la respuesta de prueba.

Estoy tratando de hacer mi código de prueba en mi aplicación Django. Mi aplicación tiene una clase de renderizador personalizado, por lo que la respuesta se verá así:

{
    "code": 422,
    "message": "Entidad No Procesable",
    "data": {
        "non_field_errors": [
            "No se puede iniciar sesión con las credenciales proporcionadas."
        ]
    }
}

Mi código de prueba:

class AuthenticationTestCase(TestCase):
    """Prueba de inicio de sesión y registro"""

    def setUp(self):
        self.client = APIClient()

    def test_login_success(self):
        """Prueba de inicio de sesión exitoso"""

        payload = {
            'email': 'test@test.com',
            'password': 'password',
            'is_active': True
        }

        create_user(**payload)

        res = self.client.post(LOGIN_URL, payload)

        self.assertEqual(res.data['code'], status.HTTP_200_OK)

La respuesta del cliente solo retorna:

"non_field_errors": [
    "No se puede iniciar sesión con las credenciales proporcionadas."
]

La pregunta es, ¿puedo hacer que la respuesta del cliente en mi prueba también utilice mi clase de renderizador personalizado?

Este es mi clase de renderizador personalizado:

class CustomRenderer(JSONRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        status_code = renderer_context['response'].status_code
        response = {
            'code': status_code,
            'message': renderer_context['response'].status_text,
            'data': data,
        }

        renderer_context['response'].status_code = 200

        return super(CustomRenderer, self) \
            .render(response, accepted_media_type, renderer_context)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes hacer que tu cliente de prueba utilice tu propia clase de renderización personalizada configurando el atributo renderer_classes en tu clase de vista para incluir tu clase de renderización personalizada.

    Por ejemplo, si tu vista se llama MiVista, puedes configurar el atributo renderer_classes de esta manera:

    class MiVista(APIView):
        renderer_classes = [RenderizadorPersonalizado]
    

    Esto le indica a Django Rest Framework que utilice tu clase de renderización personalizada para renderizar las respuestas de esta vista.

    En tu código de prueba, debes asegurarte de que estás probando la vista correcta y de que su atributo renderer_classes incluye tu renderizador personalizado.

    Una vez que tu renderizador personalizado se utiliza para renderizar las respuestas de tu vista, tu cliente de prueba debería recibir las respuestas en el mismo formato que las respuestas reales de tu aplicación.

Comments are closed.