En mi trabajo decidimos empezar a utilizar tests unitarios como una manera rápida de identificar errores a la hora de llevar algo a producción.
Lo primero que hice fue testear una de las primeras funcionalidades del proyecto que yo mismo realicé(es un proyecto muy nuevo) y encontré diferentes maneras de hacerlo.
-
Endpoint a testear:
- /topic/create/
-
Permisos necesarios:
- Estar logueado
- Ser administrador
Lo primero que tenemos que hacer es importar lo siguiente adentro del archivo test.py del proyecto:
from rest_framework.test import APITestCase, APIClient
from django.urls import reverse
from rest_framework import status
from .models import *
Lo siguiente es crear una clase en donde vamos a reunir todos los casos de testeos:
class TestTopics(APITestCase):
es importante que esa clase herede de APITestCase.
Una vez que tenemos la clase vamos a crear el método de configuración: acá adentro vamos a escribir todas las configuraciones necesarias para poder testear/probar nuestro endpoint, crear usuarios, asignarle permisos, crear grupos etc..
class TestTopics(APITestCase):
def setUp(self):
administrator_group = Group(name='administrador')
administrator_group.save()
administrator_group = Group.objects.get(name='administrator')
admin1 = User(username="administradorprueba", first_name="Admin", last_name="Dos")
admin1.set_password("administradorprueba")
admin1.save()
admin1.groups.add(administrator_group)
DATO IMPORTANTE: cuando vayamos a testear nuestro endpoint y este necesite que un usuario se encuentre logueado y con todos sus permisos, no hace falta que hagamos una petición para loguearnos y obtener el token para después hacer la petición hacia nuestro endpoint. DRF nos trae por defecto en APIClient un método llamado force_authenticate al que nosotros le pasamos la instancia de nuestro usuario y se loguea por nosotros.
def test_create_topic_only_name_and_description(self):
client = APIClient()
data = User.objects.get(username='administradorprueba')
client.force_authenticate(user=data)
response = client.post(
reverse('create_topic'), {
'name': 'productos recomendados',
'description': 'solo productos bien rankeados por la comunidad',
},
format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
Como ven, ahora a través de client podemos enviar la petición después de habernos logueado con force_authenticate.
En esta línea reverse('create_topic') lo que estamos haciendo es buscar el endpoint con el name="create_topic" definido adentro de nuestro script urls.py
Top comments (0)