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)
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 atributorenderer_classes
de esta manera: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.