Tests
Types de tests
Le projet utilise plusieurs types de tests :
-
Tests de syntaxe : Validation PHP
-
Tests fonctionnels : Tests Symfony
-
Tests d’intégration : Tests Docker
Tests fonctionnels
|
Les tests fonctionnels et une partie des tests unitaires écrivent dans la base
|
Tests Symfony
# Exécuter tous les tests
docker-compose exec php php symfony test:all
# Tests fonctionnels uniquement
docker-compose exec php php symfony test:functional
# Tests unitaires uniquement
docker-compose exec php php symfony test:unit
L’environnement de test met en cache
settings.yml déclare cache: true pour l’environnement test. Ce n’est pas un détail de
configuration : c’est ce qui permet à la suite d’observer ce que voit le deuxième
visiteur, là où se sont produits les bugs de cette zone. Un désastre dont les options
n’étaient injectées qu’à la production de la page, ou un Content-Type réécrit après
l’écriture de l’entrée, ne se voient pas autrement.
Deux conséquences pour qui écrit un test :
-
test/bootstrap/functional.phpvide le répertoire de cache à chaque fichier. L’isolation entre fichiers est donc acquise, sans rien faire. -
À l’intérieur d’un même fichier, deux demandes de la même adresse renvoient la même réponse. La seconde vient du cache. C’est voulu, mais c’est un piège si on attend une réponse fraîche : varier l’adresse, ou vider le cache entre les deux.
src/test/functional/frontend/desastreCacheTest.php montre le motif.
Écrire un test
Créer un fichier de test dans src/test/functional/ :
<?php
include(dirname(__FILE__).'/../bootstrap/functional.php');
$browser = new sfTestFunctional(new sfBrowser());
$browser->
get('/')->
with('request')->begin()->
isParameter('module', 'home')->
isParameter('action', 'index')->
end()->
with('response')->begin()->
isStatusCode(200)->
checkElement('body', '!/This is a temporary page/')->
end()
;
Tests Docker
Tests d’intégration
CI/CD
GitHub Actions
Les tests sont exécutés automatiquement sur chaque push et pull request.
Workflow : .github/workflows/ci.yml
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate PHP syntax
run: find src -name "*.php" -exec php -l {} \;
docker-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker-compose build
Voir les résultats
-
Aller sur https://github.com/constructions-incongrues/musiqueapproximative/actions
-
Sélectionner un workflow run
-
Voir les logs des tests
Couverture de code
| La couverture de code n’est pas encore configurée pour ce projet. |
Pour l’ajouter, installer PHPUnit avec Xdebug :
# Dans le Dockerfile
RUN pecl install xdebug && docker-php-ext-enable xdebug
# Générer le rapport
phpunit --coverage-html coverage/