Oublie unittest (le module par défaut de Python), c'est verbeux.
On utilise Pytest, le standard moderne.
Installation
pip install pytest
Configuration (conftest.py)
Ce fichier est "magique". Pytest le lit avant de lancer les tests. On y met nos Fixtures. Une fixture, c'est un état de départ qu'on donne à nos tests (ex: une base de données vide, un client de test...).
import pytest
from app import create_app, db
from app.models import User
@pytest.fixture
def app():
# On crée une app en mode TEST (donc avec une BDD en mémoire RAM)
app = create_app('testing')
with app.app_context():
db.create_all() # On crée les tables
yield app # On donne l'app au test
db.drop_all() # On nettoie après le test (TEARDOWN)
@pytest.fixture
def client(app):
# Un client qui simule un navigateur
return app.test_client()
@pytest.fixture
def runner(app):
# Un runner pour tester les commandes CLI
return app.test_cli_runner()
Grâce à config.py (vu au Module 6), notre environnement de test est isolé du reste.