nikoblog~/blog$ testing-flask.org
▶
Importar módulos
Importamos unittest y Flask:
import unittest
from flask import FlaskCrear clase de tests
Creamos una clase que herede de unittest.TestCase:
class FlaskTests(unittest.TestCase):
# tests aquíInicializar la app
Inicializamos la app de Flask en el método setUp():
def setUp(self):
self.app = Flask(__name__)Escribir tests para vistas
Escribimos tests para las vistas con el cliente de tests:
def test_index(self):
with self.app.test_client() as client:
res = client.get('/')
self.assertEqual(res.status_code, 200)Mockear partes complejas
Mockeamos con [cite/t:@mock.patch] para reemplazar partes complejas:
@mock.patch('requests.get')
def test_api(self, mock_get):
# Testea API mockeadaConfigurar base de datos de tests
Usamos SQLite en memoria para los tests:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'Ejecutar tests
Ejecutamos los tests con unittest:
python -m unittestRevisar cobertura
Vemos la cobertura de código con coverage:
coverage run -m unittest
coverage reportConfigurar CI
Configuramos CI para ejecutar tests automáticamente.
- Elige un servicio de CI como GitHub Actions, Travis CI o CircleCI.
- Crea un archivo de configuración para ese servicio en tu repo. Por ejemplo,
.github/workflows/ci.ymlpara GitHub Actions. - Define el trigger para ejecutar la CI. Normalmente quieres que se ejecute en cada push a tu repo.
- Especifica los pasos de la CI:
- El servicio de CI ejecutará estos pasos automáticamente cada vez que hagas push.
- Revisa los resultados de la ejecución de la CI en la interfaz del servicio. Te avisará si algún test falla.
- Arregla los tests fallidos antes de hacer merge a la rama principal. Esto asegura que solo código testeado llegue a producción.
- Opcionalmente, configura la CI para desplegar tu app automáticamente si los tests pasan.
4.1. Haz checkout del código del repo.
4.2. Configura el entorno virtual con pyenv, virtualenv, etc.
4.3. Instala dependencias con pip install.
4.4. Ejecuta los tests con un comando como python -m unittest.
4.5. Opcionalmente, revisa la cobertura de código.